[英]Gradle Buildship project dependency cycle false positive
所以我有一个多项目gradle构建,包括:
myapp
myapp2
shared
testLib
myapp
和myapp2
在shared
上具有编译依赖项。
testLib
项目还对shared
拥有一个编译项目依赖项。 它的存在是为了定义一些使用shared
类的单元测试助手代码。 这些类位于其main
SourceSet中,因为此项目的目的是构建包含测试帮助程序类的库。
现在, shared
项目具有单元测试。 这些测试利用testLib
的帮助程序代码。 因此, shared
对testLib
具有testCompile项目依赖性。
Gradle对此没有任何问题。 它理解先构建shared
,然后构建testLib
,然后在shared
运行单元测试就可以了。 但是, 造船业却没有。 在导入构建后,它将其标记为项目依赖周期:“在项目'shared'的构建路径中检测到一个周期。该周期包含项目{shared,testLib}。” 以及针对testLib
项目的类似消息。
那么,为什么不将testLib
滚动到shared
的测试sourceSet中呢? 嗯,事实是, myapp
和myapp2
的单元测试也使用了某些单元测试帮助程序代码。 这两个项目都具有对shared
编译项目依赖性以及对testLib
testCompile项目依赖性。
有什么方法可以让Buildship了解这实际上不是项目依赖周期吗?
编辑:
我已经在这里尝试了部分解决方案: https ://softnoise.wordpress.com/2014/09/07/gradle-sub-project-test-dependencies-in-multi-project-builds/将我的testLib构建更改为此(将测试帮助程序类从main
移回test
sourceSet后:插件{id'java'}
configurations {
testOutput
}
dependencies {
compile project(':shared')
}
task jarTest (type: Jar) {
from sourceSets.test.output
classifier = 'test'
}
artifacts {
testOutput jarTest
}
并通过以下方式更改我的shared
项目以引用新的testLib-test.jar
:
testCompile project(path: ':testLib', configuration: 'testOutput')
仍然没有运气。 gradle再次没有问题并且构建良好,但是在Eclipse中删除并重新导入项目后,Buildship返回与以前相同的周期警告。
Buildship目前是否无法处理这种情况?
我想这是因为eclipse对于整个项目(对于main和test而言)只有一个classpath
。 因此,gradle compile
和testCompile
是两种不同的配置-导入eclipse时,您会发现问题。
您需要摆脱依赖关系之一。 也许您可以从testLib创建一个单独的测试项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.