繁体   English   中英

Gradle Buildship项目依赖周期误报

[英]Gradle Buildship project dependency cycle false positive

所以我有一个多项目gradle构建,包括:

myapp
myapp2
shared
testLib

myappmyapp2shared上具有编译依赖项。

testLib项目还对shared拥有一个编译项目依赖项。 它的存在是为了定义一些使用shared类的单元测试助手代码。 这些类位于其main SourceSet中,因为此项目的目的是构建包含测试帮助程序类的库。

现在, shared项目具有单元测试。 这些测试利用testLib的帮助程序代码。 因此, sharedtestLib具有testCompile项目依赖性。

Gradle对此没有任何问题。 它理解先构建shared ,然后构建testLib ,然后在shared运行单元测试就可以了。 但是, 造船业却没有。 在导入构建后,它将其标记为项目依赖周期:“在项目'shared'的构建路径中检测到一个周期。该周期包含项目{shared,testLib}。” 以及针对testLib项目的类似消息。

那么,为什么不将testLib滚动到shared的测试sourceSet中呢? 嗯,事实是, myappmyapp2的单元测试也使用了某些单元测试帮助程序代码。 这两个项目都具有对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 compiletestCompile是两种不同的配置-导入eclipse时,您会发现问题。

您需要摆脱依赖关系之一。 也许您可以从testLib创建一个单独的测试项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM