Gradle Buildship项目依赖循环误报

时间:2018-01-08 18:06:41

标签: java eclipse gradle buildship

所以我有一个包含以下内容的多项目gradle构建:

myapp
myapp2
shared
testLib

myappmyapp2shared上有编译依赖关系。

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

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

Gradle对此没有任何问题。它理解首先构建shared,然后构建testLib,然后在shared中运行单元测试就好了。 Buildship 然而,不是。在导入构建之后,它将此标记为项目依赖性循环:"在项目的构建路径中检测到一个循环“共享'”。该周期由项目{shared,testLib}组成。"以及testLib项目的类似消息。

那么为什么不将testLib滚动到shared的测试源集中,您可能会问?嗯,问题是,myappmyapp2中的单元测试也使用了一些单元测试助手代码。这两个项目都对sharedtestLib上的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目前无法处理这种情况吗?

1 个答案:

答案 0 :(得分:1)

我猜这种情况正在发生,因为eclipse对整个项目只有一个classpath(主要和测试)。所以gradle compiletestCompile作为两种不同的配置 - 当导入eclipse时你会发现问题。

您需要摆脱其中一个依赖项。也许你可以为testLib中的测试创建一个单独的项目。