所以我有一个包含以下内容的多项目gradle构建:
myapp
myapp2
shared
testLib
myapp
和myapp2
在shared
上有编译依赖关系。
testLib
项目还对shared
具有编译项目依赖性。它的存在是为了定义一些使用shared
类的单元测试助手代码。这些类存在于其main
sourceSet中,因为此项目的目的是构建包含测试助手类的库。
现在shared
项目有单元测试。这些测试使用testLib
中的帮助程序代码。因此,shared
对testLib
具有 testCompile 项目依赖关系。
Gradle对此没有任何问题。它理解首先构建shared
,然后构建testLib
,然后在shared
中运行单元测试就好了。 Buildship 然而,不是。在导入构建之后,它将此标记为项目依赖性循环:"在项目的构建路径中检测到一个循环“共享'”。该周期由项目{shared,testLib}组成。"以及testLib
项目的类似消息。
那么为什么不将testLib
滚动到shared
的测试源集中,您可能会问?嗯,问题是,myapp
和myapp2
中的单元测试也使用了一些单元测试助手代码。这两个项目都对shared
和testLib
上的testCompile项目依赖项编译项目依赖项。
有没有办法让Buildship了解这不是一个真正的项目依赖循环?
修改
我在这里尝试了部分解决方案:https://softnoise.wordpress.com/2014/09/07/gradle-sub-project-test-dependencies-in-multi-project-builds/将我的testLib构建更改为此(在将测试助手类从test
移回main
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目前无法处理这种情况吗?
答案 0 :(得分:1)
我猜这种情况正在发生,因为eclipse对整个项目只有一个classpath
(主要和测试)。所以gradle compile
和testCompile
作为两种不同的配置 - 当导入eclipse时你会发现问题。
您需要摆脱其中一个依赖项。也许你可以为testLib中的测试创建一个单独的项目。