如何在Gradle中解决循环依赖
我正在将Java项目从Ant迁移到Gradle。 我认为最好的解决方案是使用Gradle的多项目支持,但我找不到摆脱循环依赖的方法。
原始项目设置为具有以下布局:
- project/ - common/ - product-a/ - product-b/
common
, product-a
和product-b
之间的关系很棘手。 common
取决于product-a
或product-b
,具体取决于配置文件。 同样,无论配置属性如何, product-a
和product-b
依赖于common
。 product-a
和product-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。
我已经考虑通过设置common
和product-a
/ product-b
期望的类的接口或者使用多态来重构product-a
和product-b
,但在我推进其中任何一个之前,是否有更好的方法用Gradle完成这个任务? 我还没准备好摆脱这种技术债务。
使用构建技巧无法解决删除循环依赖关系。 您将不得不重构您的模块,因此不再存在循环依赖。 从你的模块名称,没有其他信息,我认为你会想要提取依赖于“product- *”的“common”部分并将其放入一个新模块中。