Gradle:任务失败时的自定义消息?

Gradle:任务失败时的自定义消息?,gradle,Gradle,我想连接到compileJava目标,并在失败时发出额外的自定义消息。我们有一个非常常见的案例设置案例,很多人都忽略了它,只有在失败的情况下,它才是有用的,能够执行以下操作: compileJava.onFailure { println "Did you configure your wampfrankle to talk to the slackometer?" } 我的谷歌技能还没有找到答案 该错误是一个依赖性错误,正如Rene指出的,需要在构建执行后检测,而不是在项目评估后检

我想连接到compileJava目标,并在失败时发出额外的自定义消息。我们有一个非常常见的案例设置案例,很多人都忽略了它,只有在失败的情况下,它才是有用的,能够执行以下操作:

compileJava.onFailure { 
   println "Did you configure your wampfrankle to talk to the slackometer?" 
}

我的谷歌技能还没有找到答案

该错误是一个依赖性错误,正如Rene指出的,需要在构建执行后检测,而不是在项目评估后检测

在这里,我添加了一个对buildFinished的调用,其中包含一个闭包,用于检测是否发生了故障,并打印出一条错误消息

project.gradle.buildFinished { buildResult ->
  if (buildResult.getFailure() != null) {
    println "Did you configure your wampfrankle to talk to the slackometer?" 
  }
}
为了测试这一点,我强制使用此伪依赖项解决依赖项故障:

dependencies {
  compile 'foo:bar:baz'
}

对仅在第一个任务失败时才执行的任务使用
finalizedBy
。例如:

tasks.compileJava.finalizedBy('compileJavaOnFailure')

task compileJavaOnFailure {
  doLast {
    println 'Did you configure your wampfrankle to talk to the slackometer?'
  }

  onlyIf {
    tasks.compileJava.state.failure != null
  }
}

不幸的是,在本例中失败为“null”。这个失败实际上是解决依赖关系的失败,所以也许这就是原因。但是,我还没有弄清楚如何连接到依赖项解决成功/失败。在项目构建之后,afterProject不会被触发。您可能需要检查project.gradle.buildFinished。这个钩子在构建完成时被调用,你可以检查任务的状态来收集额外的信息。你可以贴出来回答,或者我会在测试后更正这个答案。非常接近。buildFinished因为失败的“compileJava”任务被多次调用,我不知道为什么。也许对于每个可传递依赖项?啊,每个子项目都会调用buildFinished(),即使我只构建其中一个子项目。至少,我认为这就是调用次数匹配的原因,即使BuildResult对象中没有任何东西指示它用于哪个项目。