Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 为什么即使完成的任务是最新的,此终结器仍在运行?_Gradle - Fatal编程技术网

Gradle 为什么即使完成的任务是最新的,此终结器仍在运行?

Gradle 为什么即使完成的任务是最新的,此终结器仍在运行?,gradle,Gradle,我想在代码质量报告上运行转换,这样就可以将它们转换为人类可读和机器可读的格式。我认为,finalizedBy将是用于此目的的理想工具,因为根据: 即使完成的任务失败,也将执行终结器任务 ……但是 如果最终确定的任务没有执行任何工作,例如如果它被认为是最新的,则不会执行最终确定器任务 但是,我看到转换任务正在运行,即使它们完成的任务是最新的。这是我的构建。gradle: apply plugin: "findbugs" apply plugin: "java" repositories { ma

我想在代码质量报告上运行转换,这样就可以将它们转换为人类可读和机器可读的格式。我认为,
finalizedBy
将是用于此目的的理想工具,因为根据:

即使完成的任务失败,也将执行终结器任务

……但是

如果最终确定的任务没有执行任何工作,例如如果它被认为是最新的,则不会执行最终确定器任务

但是,我看到转换任务正在运行,即使它们完成的任务是最新的。这是我的
构建。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")
            }
        }
    }
}
如您所见,
transformFindbugsMain
正在运行,即使
findbugsMain
是最新的。更糟的是,这个简单的测试用例恰好不包含测试类,所以<代码> FunBugStest根本没有输出(Gealle似乎考虑到这个“最新的”),我想这似乎是合理的。因此,
transformFindbugsTest
完全爆炸了(堆栈跟踪——为了简洁起见这里省略了——表明这确实是ant.xslt无法找到源文件的结果)

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


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

正如@Opal提到的,这看起来确实像一个bug。下一个最小梯度代码将重新处理此问题:

task taskY << {
    println 'taskY'
}

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

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

这将是一个相当大的错误,您能提供一个可复制的示例吗?@Opal-whoops;构建脚本中有一个输入错误。现在,它应该可以作为一个完整的例子运行了。谢谢你的确认。
task taskY << {
    println 'taskY'
}

task taskX {
    outputs.upToDateWhen { true }
    finalizedBy taskY
    doLast { println 'taskX' }
}
$ ./gradlew taskX
:taskX UP-TO-DATE
:taskY
taskY