Gradle Jar任务忽略doLast中的destinationDir

Gradle Jar任务忽略doLast中的destinationDir,gradle,jar,task,Gradle,Jar,Task,我需要在构建的执行阶段执行Jar任务。 我试过了 记录器显示destinationDir的值已更改。但当我运行脚本时,它会在默认位置而不是“某个位置”创建Jar 如果我删除“doLast”,则任务在配置阶段工作,忽略不符合我需要的dependsOn值。不要在执行阶段更改配置。这将对最新检查起作用,您的任务可能在不必要时执行,或者更糟糕的是,在必要时不执行。除非您完全禁用此任务的最新检查,否则您将禁用Gradle的一大优势 不要执行doLast,它工作正常。如您所述,任务不是在配置阶段运行的。只有

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

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


如果我删除“doLast”,则任务在配置阶段工作,忽略不符合我需要的dependsOn值。

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

不要执行
doLast
,它工作正常。如您所述,任务不是在配置阶段运行的。只有您的
println
语句在配置阶段运行,就像它们在配置块中一样。实际任务的执行将在您定义的依赖项之后进行

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

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