Gradle Jar任务忽略doLast中的destinationDir

时间:2017-01-13 14:08:33

标签: gradle jar task

我需要在构建的执行阶段执行Jar任务。 我试过了

task ("createJar", type: Jar, dependsOn: "some_task") {
  doLast{
    println ("default destinationDir " + destinationDir)
    destinationDir file("some_location")
    println ("destinationDir after change" + destinationDir)
    from "some_dir"
  }
}

记录器显示destinationDir的值已更改。但是当我运行脚本时,它会在默认位置创建Jar而不是" some_location"。

如果我删除" doLast"然后任务在配置阶段工​​作,并忽略不符合我需要的dependsOn值。

1 个答案:

答案 0 :(得分:1)

请勿在执行阶段更改配置。这将对最新的检查起作用,您的任务可能会在没有必要时执行,甚至更糟糕的是在必要时执行。除非您完全禁用此任务的最新检查,否则您将禁用Gradle的一大优势。

不要doLast,它可以正常工作。如您所述,任务在配置阶段运行。只有您的println语句在配置阶段运行,因为它们位于配置块中。实际的任务执行将在您定义的依赖项之后发生。

PS:当然,您必须在doFirst { }中设置配置,而不是doLast { }。顾名思义,doLast { }在所有已存在的任务操作后执行doFirst { } 之前。但请不要这样做,这很可能不是正确的事情。