0

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

myapp
myapp2
shared
testLib

在哪里myappmyapp2shared.

testLib项目还具有对shared. 它的存在是为了定义一些使用shared类的单元测试帮助代码。这些类存在于其mainsourceSet 中,因为该项目的目的是构建包含测试助手类的库。

现在该shared项目有单元测试。这些测试使用testLib. 因此shared有一个testCompile项目依赖于testLib.

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

那么,您可能会问,为什么不直接testLib进入测试 sourceSet呢?shared好吧,问题是,一些单元测试帮助代码也被 和 中的单元测试myapp使用myapp2。这两个项目都具有 compile 项目依赖项shared和 testCompile 项目依赖项testLib

有什么方法可以让 Buildship 明白这不是一个真正的项目依赖周期?

编辑:

我在这里尝试了部分解决方案:https : //softnoise.wordpress.com/2014/09/07/gradle-sub-project-test-dependencies-in-multi-project-builds/将我的testLib构建更改为此(将测试助手类从 ) 移回testsourceSet 后main:plugins { 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只是目前无法处理这种情况吗?

4

1 回答 1

1

我想这是因为,eclipseclasspath对整个项目(主要和测试)只有一个。因此,作为 gradlecompiletestCompile两种不同的配置 - 导入 eclipse 时,您会发现问题。

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

于 2018-01-08T18:47:19.293 回答