gpt4 book ai didi

gradle - 为什么即使终结任务是最新的,该终结器也仍在运行?

转载 作者:行者123 更新时间:2023-12-03 05:01:51 25 4
gpt4 key购买 nike

我想对代码质量报告进行转换,以便可以以人类和机器可读的格式进行转换。我认为finalizedBy将是用于此目的的理想工具,因为根据the documentation:

Finalizer tasks will be executed even if the finalized task fails.



……但是……

finalizer tasks are not executed if the finalized task didn't do any work, for example if it is considered up to date



但是,即使最终完成的任务是最新的,我也看到转换任务正在运行。这是我的 build.gradle:
apply plugin: "findbugs"
apply plugin: "java"

repositories { mavenCentral() }

def findbugsJar = project.configurations.findbugs.find { it.name.startsWith("findbugs") }

tasks.withType(FindBugs) {
reports {
xml.destination "$buildDir/reports/${task.name}.xml"
xml.setWithMessages(true)
}

def taskName = it.name
def transformer = tasks.create(name: "transform" + GUtil.toCamelCase(taskName))

it.finalizedBy transformer
transformer.description "Transform report from $taskName into HTML."

transformer << {
ant.xslt(in: "$buildDir/reports/${taskName}.xml", out: "$buildDir/reports/${taskName}.html") {
style {
zipentry(zipfile: findbugsJar, name: "fancy-hist.xsl")
}
}
}
}

./gradlew check的输出没有源更改:
$ ./gradlew check
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findbugsMain UP-TO-DATE
:transformFindbugsMain
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:findbugsTest UP-TO-DATE
:transformFindbugsTest FAILED

FAILURE: Build failed with an exception.

如您所见,即使 transformFindbugsMain是最新的, findbugsMain仍在运行。更糟糕的是,这种简化的测试用例恰巧不包含任何测试类,因此 findbugsTest根本不产生任何输出(我认为,Gradle似乎认为此“最新”,这似乎足够合理)。结果, transformFindbugsTest完全轰炸了(堆栈跟踪(为简洁起见,在此省略)表示这确实是ant.xslt无法找到源文件的结果)。

我是否误解了 finalizedBy的预期行为?我的构建文件有问题吗?

我在Windows 8上运行Gradle 2.3和Java(64位)1.8.0_40。

最佳答案

正如@Opal提到的,这确实看起来像是个错误。下一个最小gradle代码将解决此问题:

task taskY << {
println 'taskY'
}

task taskX {
outputs.upToDateWhen { true }
finalizedBy taskY
doLast { println 'taskX' }
}

输出:
$ ./gradlew taskX
:taskX UP-TO-DATE
:taskY
taskY

根据您的具体情况,可能的解决方法是根据相关文件( $buildDir/reports/${taskName}.xml)的存在来限制操作。

关于gradle - 为什么即使终结任务是最新的,该终结器也仍在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29178153/

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