如何将单个源集添加到多个子项目?
首先……是的,我知道这有多荒谬。这只是我必须做的事情。
设置
- 该项目使用 Groovy DSL。
- 有 3 个子项目(A、B、C),每个子项目都有自己独特的主源集。
- 这些项目之外还有 5 个额外的源集(1、2、3、4、5)。
- 可以单独编译外部源集的 Nonce。
- 所有源集都依赖于在每个子项目中定义了 3 个不同时间的接口。
- 子项目主源不能依赖任何外部源
- 1和2需要用A、B、C编译。
- 3需要用A和B编译。
- 4需要用B和C编译
- 5 只需要用 C 编译。
- 4 和 5 需要依赖于 2 中定义的类。
- 5 必须是一个独立的源集,以便它可以作为源集包含在任何未来可能添加的子项目中。
- 不允许任何外部源包含来自任何其他源集的源
- 不允许单独编译任何外部源。
- 不允许将任何外部源包含为 jar 或项目依赖项;它们必须作为源集包含在内,并且必须为包含它们的每个子项目单独编译。
一个
sourceSets {
main {
java {
srcDirs = ["src",
"$rootDir/source_sets/1/src",
"$rootDir/source_sets/2/src",
"$rootDir/source_sets/3/src"
]
}
}
}
乙
sourceSets {
main {
java {
srcDirs = ["src",
"$rootDir/source_sets/1/src",
"$rootDir/source_sets/2/src",
"$rootDir/source_sets/3/src",
"$rootDir/source_sets/4/src"
]
}
}
}
C
sourceSets {
main {
java {
srcDirs = ["src",
"$rootDir/interfaces/source_sets/1/src",
"$rootDir/interfaces/source_sets/2/src",
"$rootDir/interfaces/source_sets/4/src",
"$rootDir/interfaces/source_sets/5/src"
]
}
}
}
设置.gradle
include(":interfaces/A")
project(":interfaces/A").name = "A"
include(":interfaces/A")
project(":interfaces/A").name = "A"
include(":interfaces/A")
project(":interfaces/A").name = "A"
问题是 4 和 5 无法找到 2 中的类,我的 IDE(IntelliJ)无法解析正确的类路径。
我真正需要的是外部源集的行为就像它们有 3 个单独的副本,而实际上没有 3 个单独的副本,并且我需要在不使用符号/软链接的情况下这样做。
该解决方案只需要使用 gradle,但它可以使用 JetBrains“idea”插件进行 gradle,只要它不涉及提交“.idea”文件夹下的任何文件,但它可以包含内联 xml 或资源文件夹中的文件在 .idea 文件夹之外。
所以是的......这太复杂了,只是......呃!但事实就是如此。