gpt4 book ai didi

java - Gradle Buildship 项目依赖周期误报

转载 作者:行者123 更新时间:2023-12-02 11:46:35 26 4
gpt4 key购买 nike

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

myapp
myapp2
shared
testLib

其中 myappmyapp2shared 具有编译依赖关系。

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

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

Gradle 对此没有任何问题。它理解首先构建 shared,然后构建 testLib,然后在 shared 中运行单元测试就可以了。然而, build 却并非如此。在我导入构建后,它将其标记为项目依赖循环:“在项目‘共享’的构建路径中检测到循环。该循环由项目 {shared, testLib} 组成。”以及 testLib 项目的类似消息。

那么您可能会问,为什么不将 testLib 放入 shared 的测试源集中呢?嗯,问题是,myappmyapp2 中的单元测试也使用了一些单元测试帮助程序代码。这两个项目都具有对 shared 的编译项目依赖项和对 testLib 的 testCompile 项目依赖项。

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

编辑:

我在这里尝试了部分解决方案:https://softnoise.wordpress.com/2014/09/07/gradle-sub-project-test-dependencies-in-multi-project-builds/将我的 testLib 版本更改为此(将测试帮助器类从 main 移回 test 源集之后): 插件{ 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 对于整个项目(对于主项目和测试项目)只有一个类路径。因此,gradle compiletestCompile 作为两个不同的配置 - 当导入到 eclipse 时你会发现问题。

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

关于java - Gradle Buildship 项目依赖周期误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com