我正在将Java项目从Ant迁移到Gradle.我认为最好的解决方案是使用Gradle的多项目支持,但我找不到摆脱循环依赖的方法.
原始项目设置为具有以下布局:
- project/
- common/
- product-a/
- product-b/
Run Code Online (Sandbox Code Playgroud)
之间的关系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')
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我想到了一个方法,让它更接近公正的工作product-a
.这导致我这样:
project(':common') {
dependencies {
compile project(':product-a')
}
}
Run Code Online (Sandbox Code Playgroud)
这将引发具有循环依赖性的异常.
我已经考虑过重构,product-a
并且product-b
通过设置common
和product-a
/ product-b
或使用多态来设置类的接口,但在我继续使用其中任何一个之前,是否有更好的方法来实现Gradle?我还没准备好摆脱这种技术债务.
使用构建技巧无法解决删除循环依赖关系的问题.您将不得不重构您的模块,因此不再存在循环依赖.从你的模块名称,没有其他信息,我认为你会想要提取依赖于"product-*"的"common"部分并将其放入一个新模块中.
归档时间: |
|
查看次数: |
9661 次 |
最近记录: |