我需要在构建的执行阶段执行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值。
答案 0 :(得分:1)
请勿在执行阶段更改配置。这将对最新的检查起作用,您的任务可能会在没有必要时执行,甚至更糟糕的是在必要时执行。除非您完全禁用此任务的最新检查,否则您将禁用Gradle的一大优势。
不要doLast
,它可以正常工作。如您所述,任务在配置阶段不运行。只有您的println
语句在配置阶段运行,因为它们位于配置块中。实际的任务执行将在您定义的依赖项之后发生。
PS:当然,您必须在doFirst { }
中设置配置,而不是doLast { }
。顾名思义,doLast { }
在所有已存在的任务操作后执行,doFirst { }
之前。但请不要这样做,这很可能不是正确的事情。