如何在Gradle中解决循环依赖

我正在将Java项目从Ant迁移到Gradle。 我认为最好的解决方案是使用Gradle的多项目支持,但我找不到摆脱循环依赖的方法。

原始项目设置为具有以下布局:

- project/ - common/ - product-a/ - product-b/ 

commonproduct-aproduct-b之间的关系很棘手。 common取决于product-aproduct-b ,具体取决于配置文件。 同样,无论配置属性如何, product-aproduct-b依赖于commonproduct-aproduct-b永远不会同时构建。

我认为一个快速的解决方案是在project/build.gradle使用这样的东西:

 project(':product-a') { dependencies { compile project(':common') } } project(':product-b') { dependencies { compile project(':common') } } 

接下来,我想到了一种方法,让它更接近于只为product-a而工作。 这导致我这样:

 project(':common') { dependencies { compile project(':product-a') } } 

这将引发具有循环依赖性的exception。

我已经考虑通过设置commonproduct-a / product-b期望的类的接口或者使用多态来重构product-aproduct-b ,但在我推进其中任何一个之前,是否有更好的方法用Gradle完成这个任务? 我还没准备好摆脱这种技术债务。

使用构建技巧无法解决删除循环依赖关系。 您将不得不重构您的模块,因此不再存在循环依赖。 从你的模块名称,没有其他信息,我认为你会想要提取依赖于“product- *”的“common”部分并将其放入一个新模块中。