我需要在构建执行阶段执行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的值已更改。但是,当我运行脚本时,它将在默认位置而不是“some_location”中创建Jar。
如果删除“doLast”,那么任务将在配置阶段起作用,并忽略不符合我的需求的dependsOn值。
最佳答案
不要在执行阶段更改配置。这将与最新检查相反,并且您的任务可能在不需要时执行,或者甚至在必要时不执行。除非您完全禁用此任务的最新检查,否则您将禁用Gradle的一大强项。
不要执行doLast
,它可以正常工作。如您所述,该任务是而不是在配置阶段运行。在配置阶段仅运行println
语句,就像在配置块中一样。实际的任务执行将在您定义的依赖项之后发生。
PS:当然,您必须在doFirst { }
中设置配置,而不是doLast { }
。顾名思义,doLast { }
是在之后所有已存在的任务 Action 之后执行,doFirst { }
在之前执行。但是请不要这样做,这很可能不是正确的选择。
关于gradle - Gradle Jar任务忽略doLast中的destinationDir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636448/