我的Java项目的设置如下:
ProjectRoot
ModuleA
src
main
java
ModuleB
src
main
java
ModuleC
src
main
java
ModuleC用于保存ModuleA和ModuleB通用的代码。但是,ModuleC还具有引用ModuleA和ModuleB中的代码的代码。实际上,这是一个循环引用。但是请注意,当ModuleC确实在ModuleA或ModuleB中调用API时,由于API本身在ModuleC中不进行任何调用,因此实际上不会进行循环调用。我的gradle项目失败,因为ModuleC中的代码无法解析ModuleA和ModuleB的依赖关系。
对于ModuleA,settings.gradle文件如下所示:
include 'ModuleA', ":ModuleC"
project(':ModuleC').projectDir = new File('../ModuleC')
对于ModuleB,settings.gradle文件如下所示:
include 'ModuleB', ":ModuleC"
project(':ModuleC').projectDir = new File('../ModuleC')
在ModuleA和ModuleB的build.gradle文件中,我将依赖项设置为:
dependencies {
compile project(':ModuleC')
}
但是我不能将其放入ModuleC中,因为它将创建循环依赖项:
dependencies {
compile project(':ModuleA')
compile project(':ModuleC')
那么我需要进行哪些设置以避免循环依赖?
答案 0 :(得分:0)
根据这篇文章,这是不可能的:
https://stackoverflow.com/a/38063421/753632
但是,我想出了一个解决方案,其中您不引用依赖项,而是将ModuleC视为主要项目,然后包含其他模块的源代码。因此,在ModuleC的build.gradle文件中:
sourceSets {
main {
java {
srcDirs 'src'
srcDirs '../ModuleA/src'
srcDirs '../ModuleB/src'
}
}
}
然后构建项目,仅在ModuleC的文件夹中打开一个终端,然后运行gradle build