我有一个依赖于installDist
的自定义任务 - 不仅用于执行,还用于installDist
输出:
project.task('run', type: JavaExec, dependsOn: 'installDist', overwrite: true) {
def libdir = new File("$project.tasks.installDist.destinationDir/lib")
...
当第一次运行时,由于Gradle的工作方式,libdir
无法捕获installDist
的目标目录。由于我需要使用libdir
作为我的任务,我如何等待installDist完成,然后运行我的任务?
我知道我可以在任务之前明确地运行installDist
,但我想在clean
之后运行我的任务。
答案 0 :(得分:5)
在@Ben Greens回答之后,我想:
project.task('run', type: JavaExec, dependsOn: 'installDist', overwrite: true) {
doFirst {
def libdir = new File("$project.tasks.installDist.destinationDir/lib")
...
所以这在我的任务执行之前发生,但在执行installDist
之后发生。
答案 1 :(得分:2)
任务生命周期有点令人困惑。 Gradle读取整个文件并尝试在实际执行之前配置任务。有关生命周期的更多信息,请查看https://docs.gradle.org/current/userguide/build_lifecycle.html上的示例20.1中的build.gradle。
为避免这种情况,您可以尝试将相关的任务信息放入doLast
块中,如下所示:
task run() {
dependsOn 'installDist'
doLast {
javaexec {
main = project.mainClassName
classpath = project.configurations.standaloneRuntime
def libdir = new File("$project.tasks.installDist.destinationDir/lib")
}
}
}