【问题标题】:How to make sure doLast even task is skipped如何确保 doLast 甚至任务被跳过
【发布时间】:2016-05-28 03:52:52
【问题描述】:

我有以下代码:

jar.doLast {
    def isFailed = jar.state.failure
    def proc
    if (isFailed) {
        proc = ['notify-send', "-u", "critical", "Build ${project.name} failed"].execute()
    } else {
        proc = ['notify-send', "Build ${project.name} finish"].execute()
    }
    proc.waitForProcessOutput(System.out, System.err);
}

当我第一次运行gradle --daemon jar 时,它会发送通知,当我再次运行它时,jar.doLast 没有运行,我认为这是因为 gradle 自动跳过了 jar,因为 src 与旧 src 相同,所以如何确保 jar.doLast 在第二种情况下运行?

【问题讨论】:

  • jar { output.upToDateWhen {false} }
  • 但是如果jar任务没有运行,你为什么要发送任何通知?

标签: java gradle groovy


【解决方案1】:

感谢@Aarjav,我使用以下代码:

jar {
    outputs.upToDateWhen { false }
}

jar.doLast {
    def isFailed = jar.state.failure
    def proc
    if (isFailed) {
        proc = ['notify-send', "-u", "critical", "Build ${project.name} failed"].execute()
    } else {
        proc = ['notify-send', "Build ${project.name} finish"].execute()
    }
    proc.waitForProcessOutput(System.out, System.err);
}

会强制运行jar,jar任务不会浪费太多(对比compileJava),不影响构建时间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多