我的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')
那么,我需要进行哪些设置以避免循环依赖?
最佳答案
根据这篇文章,不可能:
https://stackoverflow.com/a/38063421/753632
但是,我想出了一个解决方案,其中您不引用依赖项,而是将ModuleC视为主要项目,然后包含其他模块的源代码。因此,在ModuleC的build.gradle文件中:sourceSets { main { java { srcDirs 'src' srcDirs '../ModuleA/src' srcDirs '../ModuleB/src' } } }
然后,要构建项目,请仅在ModuleC的文件夹中打开一个终端,然后运行gradle build
关于gradle - 避免在gradle构建中循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51891074/