从父项目推断Gradle子项目中的依赖项



我的Gradle项目中目前有3个子项目,结构如下:

Main Project
| 
-- Project A
-- Project B
-- Common Src

项目A依赖Lib A和Common Src,项目B依赖Lib B和Common Src。库A和库B包含相同类的不同实现。

我对Common Src项目的计划是容纳所有的实用程序类,这必然取决于Lib A和Lib B。

有没有办法设置这个,我的gradle项目应该是什么样子?

我尝试过的事情:

  1. 我试图将Common Src作为子项目删除,并将其包含在项目a和项目B的sourceSets中。然而,IntelliJ似乎将Common Src标记为项目a的sources root,即使通过gradle进行构建,我也无法让IntelliJ认识到项目B也有在Common Src中的sources根
  2. 将Lib A和Lib B都添加到Common Src的依赖项中,但显然这不起作用

背景:

我已经创建了一个与Forge(项目a(和Fabric(项目B(modloader兼容的Minecraft mod。我在两个项目中都有实用程序类,它们具有相同的源代码,但需要编译两次,每次都有不同的依赖项。我不想每次更改Utility类中的某些内容时都要编写两次代码。

编辑:我找到了一个解决方法:
  1. Project AProject B中,在各自的build.gradle中添加一个任务,将源文件从Common Src复制到每个项目的构建目录中
  2. Project AProject BsourceSets配置为包括我们刚刚复制到的构建文件夹中的源文件
  3. Common Src配置为gradle子项目,并将Lib A(或Lib B(添加到Common Src的依赖项中(只是为了获得IntelliJ的一些上下文(

这可能就是您想要的:

在";共享的";项目(/模块(构建脚本api";而不是">实现";对于您希望子项目从中继承的每个依赖项。示例:(kotlin DSL(

dependencies {
api("org.jetbrains.kotlinx", "kotlinx-coroutines-core", "1.6.4")
...
}

然后,使项目A和项目B";inherit";来自像这样的共享项目

dependencies {
implementation(project(":shared")) // "shared" is your "utility" prject
}

最新更新