Gradle 小梯度升级中断了测试编译
我想增量升级Gradle包装器,以提高构建速度。在从2.3迁移到2.4之后,测试编译失败,出现了Gradle 小梯度升级中断了测试编译,gradle,groovy,Gradle,Groovy,我想增量升级Gradle包装器,以提高构建速度。在从2.3迁移到2.4之后,测试编译失败,出现了不兼容类型错误,我正在与依赖项作斗争 考虑一下斯波克测试: class DetailsSortKeySpec扩展了规范{ def“简单测试”(){ 鉴于: TestDetailsOrtKey TestDetailsOrtKey=新的TestDetailsOrtKey(详细信息,排序键) 期望: TestDetailsOrtKey.details.equals(详细信息) 哪里: 详细信息|排序键 新的
不兼容类型
错误,我正在与依赖项作斗争
考虑一下斯波克测试:
class DetailsSortKeySpec扩展了规范{
def“简单测试”(){
鉴于:
TestDetailsOrtKey TestDetailsOrtKey=新的TestDetailsOrtKey(详细信息,排序键)
期望:
TestDetailsOrtKey.details.equals(详细信息)
哪里:
详细信息|排序键
新的TestDetails(id:0)| Collator.getInstance(Locale.ENGLISH).getCollationKey(“”)
}
私有类TestDetailsOrtKey扩展了DetailsOrtKey{
TestDetailsSortKey(TestDetails详细信息,CollationKey CollationKey){
超级(详细信息,排序规则键)
}
}
}
这个Java类:
公共类详细信息ssortkey{
私人最终T详细信息;
私有最终排序规则密钥排序规则密钥;
public DetailsSortKey(final T details,final CollationKey CollationKey){
this.details=详细信息;
this.collationKey=Objects.requirennull(collationKey);
}
公开的最终信息{
退货详情;
}
}
运行compileTestGroovy
时出现以下错误消息:
/var/lib/jenkins/workspace/gradle_upgrade/build/tmp/compileTestGroovy/groovy-java-stubs/com/vendor/transfer/sorting/DetailsSortKeySpec.java:25: error: incompatible types: Details cannot be converted to TestDetails
super ((com.vendor.common.transfer.Details)null, (java.text.CollationKey)null);
^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error
startup failed:
Compilation failed; see the compiler error output for details.
1 error
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':WEB-Commons:compileTestGroovy'.
> Compilation failed; see the compiler error output for details.
没有列出任何与此相关的问题,因此我深入研究了Groovy中可能是根本原因的问题,并找到了一个解决方案。但是这个bug应该已经被修复了。我不明白在哪里以及为什么会有人试图将Details
转换为TestDetails
,这只是Details
类的简单而空洞的派生
以下是Gradle发行版中使用的Groovy版本:
渐变2.3:Groovy:2.3.9
渐变2.4:Groovy 2.3.10
对我来说,这似乎与引用的Groovy bug完全相同,但该bug应该在2.3.8版之后修复,并且不应该影响此构建。此外,项目中的依赖关系声明如下:
dependencies {
// mandatory dependencies for using Spock
compile "org.codehaus.groovy:groovy-all:2.4.11"
testCompile "org.spockframework:spock-core:1.1-groovy-2.4"
}
两个gradlew:dependencies
的输出之间的差异仅包含发行说明中提到但不属于测试范围的工具
最后,这里使用的是哪个Groovy版本?Spock对
Groovy all
具有可传递的依赖关系,这可能与您声明的Groovy all
版本冲突。另外,您没有使用Gradle版本的groovy all
(您正在声明此版本的另一个版本)。我以不同的方式声明这两个依赖项,如下所示:
dependencies {
compile localGroovy()
testCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude module: 'groovy-all'
}
}
我认为您希望使用与Gradle捆绑的版本不同的Groovy版本进行编译。看 例如: *编辑* 要查看选择的版本(由于依赖项解析),您可以 或(其中xxx为子项目名称) 要强制使用特定的依赖项版本,可以
gradle dependencies
configurations.all {
resolutionStrategy {
force 'org.codehaus.groovy:groovy-all:2.4.11'
}
}
请参见,因为这些依赖关系根本没有改变,我怀疑这会有任何影响。此外,参考捆绑的Groovy发行版并不总是一个好主意,是吗?Spock-for-Groovy-2.4可能会面对Groovy 2.3并崩溃,这取决于您对“捆绑Groovy发行版”的区分,捆绑Spock?还是和Gradle捆绑在一起?我使用的是与Gradle捆绑在一起的版本当Gradle附带Groovy 1.9或3.1时会发生什么?这就是我的意思,参考捆绑版不是一个好主意。您想使用与依赖项一起工作的特定版本,对吗?我一直想使用与gradle捆绑的groovy版本,因为我只在groovy中编写gradle插件或spock测试。其他一切都是java,我从不将Groovy代码部署到生产环境中。请参阅我的另一个答案,即使用您自己的Groovy版本进行编译谢谢,但是我只能在配置阶段使用这些语句,因为编译错误-然后输出绑定的Groovy版本。无法执行测试中的任何代码。还有其他想法吗?那没用。这样我就可以强迫它使用Groovy 2.3,它实际上是与Gradle捆绑在一起的。它因版本不匹配错误而中断。这证明我的尝试使用的不是捆绑的Groovy,而是我引用的Groovy。问题是-为什么它仍然中断?也许您有另一个依赖项引入了
groovy all
依赖项。尝试gradle dependencies
(或子项目的gradle xxx:dependencies
)查看发生了什么。您可能需要强制执行该版本(请参阅我的更新),这就是为什么我不知道这里发生了什么。一种巫术。。。但是Groovy没有明显改变,Gradle版本之间也没有任何改变,这会干扰我的测试。。。无论如何,由于这似乎是某种巫术,我接受你的回答,因为它提供了有用的策略。
gradle xxx:dependencies
configurations.all {
resolutionStrategy {
force 'org.codehaus.groovy:groovy-all:2.4.11'
}
}