【发布时间】:2016-10-29 23:48:17
【问题描述】:
我正在将一个 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')
}
}
这将引发循环依赖异常。
我考虑通过设置common 和product-a/product-b 预期的类的接口或使用多态性来重构product-a 和product-b,但在我继续使用其中任何一个之前,有没有更好的方法来用 Gradle 完成这个?我还没有准备好摆脱这种技术债务。
【问题讨论】: