我的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项目应该是什么样子?
我尝试过的事情:
- 我试图将Common Src作为子项目删除,并将其包含在项目a和项目B的sourceSets中。然而,IntelliJ似乎将Common Src标记为项目a的sources root,即使通过gradle进行构建,我也无法让IntelliJ认识到项目B也有在Common Src中的sources根
- 将Lib A和Lib B都添加到Common Src的依赖项中,但显然这不起作用
背景:
我已经创建了一个与Forge(项目a(和Fabric(项目B(modloader兼容的Minecraft mod。我在两个项目中都有实用程序类,它们具有相同的源代码,但需要编译两次,每次都有不同的依赖项。我不想每次更改Utility类中的某些内容时都要编写两次代码。
- 在
Project A
和Project B
中,在各自的build.gradle
中添加一个任务,将源文件从Common Src
复制到每个项目的构建目录中 - 将
Project A
和Project B
的sourceSets
配置为包括我们刚刚复制到的构建文件夹中的源文件 - 将
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
}