Gradle:任务的配置取决于另一个任务的执行

时间:2017-01-04 09:00:51

标签: gradle

My Gradle构建有两个任务:

  • findRevision(type:SvnInfo)
  • buildWAR(类型:MavenExec,dependsOn:findRevision)

这两个任务都是基于配置的,但buildWAR任务依赖于仅在findRevision任务的执行阶段定义的项目属性。

这会中断该过程,因为Gradle在尝试配置buildWAR任务时无法找到所述属性。

有没有办法延迟绑定或配置,直到另一个任务执行完毕?

在这个特定情况下,我可以使用mavenexec方法而不是MavenExec任务类型,但是在没有替代方法的类似场景中应该做些什么呢?

1 个答案:

答案 0 :(得分:0)

根据您要更改的配置选项,您可以在buildWAR.doFirst { }任务的执行阶段更改它。但通常这是一个非常糟糕的主意。如果你e。 G。改变影响UP-TO-DATE检查结果的东西,例如输入文件,任务可能会执行虽然没有必要,或者甚至更糟糕的是不执行它是必要的。您当然可以使用outputs.upToDateWhen { false }来执行任务以解决此问题,但可能存在其他问题,并且这样您也可以禁用Gradles中最大的一个强项。

重新设计构建是一个更好的主意,这是不必要的。例如,已经在配置时确定修订。根据任务是否需要很长时间,这可能是一个可行的解决方案。另外,根据您对修订的要求,您可以考虑@LanceJava的建议,并使findRevision任务生成一个包含修订版的文件,然后将其打包到WAR中并在运行时使用。 / p>