Gradle:如何在多个任务上使用动态属性来使构建失败?

时间:2014-08-18 18:03:42

标签: java svn gradle

我的一个构建任务提取有关当前SVN分支的信息。在标记的构建中,我希望更严格并且在构建时失败,例如,链接检查器找到联机帮助文件的死链接。在分支或主干的常规构建中,这不应该破坏构建。

我有以下代码,其中提到的Perl脚本创建了一个属性文件:

task generateSvnInfo(type: Exec) {
    outputs.files "generated/svninfo"
    executable "perl"
    args "..."
}

Properties buildProps = new Properties()

task svninfo() {
    inputs.files generateSvnInfo.outputs.files
    outputs.upToDateWhen { false }
    buildProps.load(new FileInputStream(inputs.files.getSingleFile()))
}

现在我的其他目标取决于svninfo(以及填充buildProps的事实)。

task checkHelpLinks(type: Exec) {
    dependsOn "svninfo"
    executable "perl"
    args "..."
}

如果找到死的帮助链接,这将始终失败。据我了解,ignoreExitValue默认为false。要在非标记版本上将其设置为true,我可以将其添加到checkHelpLinks任务中:

ignoreExitValue = true
doLast {
    ignoreExitValue = buildProps.FROM_TAG == "false"
}

这样可行,但我有四到五个检查任务,并且不希望重复该代码。所以我试过

tasks.grep(~ /^check.+/).each { task ->
    task.ignoreExitValue = true
    task.doLast {
        task.ignoreExitValue = buildProps.FROM_TAG == "false"
    }
}

此代码似乎没有被执行。我认为这可能是因为我将Task对象与grep中的String进行比较,但使用

tasks.grep(it.name =~ /^check.+/).each { task ->

给我一​​个构建脚本错误("无法找到属性'它在根项目' foo'。)

如何将标记检查添加到所有检查任务中?

是否有更好的方法从作为构建过程的一部分创建的文件中加载属性?

是否有SVN插件可以为我工作?

0 个答案:

没有答案