避免gradle构建中的循环依赖

时间:2018-08-17 08:15:34

标签: gradle

我的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')

那么我需要进行哪些设置以避免循环依赖?

1 个答案:

答案 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