Gradle 依赖于其他任务输出的渐变任务?
我有一个自定义任务,它依赖于Gradle 依赖于其他任务输出的渐变任务?,gradle,Gradle,我有一个自定义任务,它依赖于installDist——不仅用于执行,还依赖于installDist输出: project.task('run', type: JavaExec, dependsOn: 'installDist', overwrite: true) { def libdir = new File("$project.tasks.installDist.destinationDir/lib") ... 在第一次运行时,libdir不会捕获installDist的目标
installDist
——不仅用于执行,还依赖于installDist
输出:
project.task('run', type: JavaExec, dependsOn: 'installDist', overwrite: true) {
def libdir = new File("$project.tasks.installDist.destinationDir/lib")
...
在第一次运行时,libdir
不会捕获installDist
的目标目录,这是因为Gradle是如何工作的。既然我的任务需要使用libdir
,我如何等待installDist完成,然后再运行我的任务
我知道我可以在执行任务之前显式运行
installDist
,但我只想在clean
之后运行任务。任务生命周期有点混乱。Gradle读取整个文件,并在实际执行任务之前尝试配置任务。有关生命周期的更多信息,请查看上的示例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")
}
}
}
在@Ben Greens的回答之后,我想:
project.task('run', type: JavaExec, dependsOn: 'installDist', overwrite: true) {
doFirst {
def libdir = new File("$project.tasks.installDist.destinationDir/lib")
...
因此,这发生在执行任务之前,但在执行
installDist
之后。实际上doFirst
是解决方案。我知道使用doLast,但这不起作用,因为我需要在任务执行之前使用lib dir,而不是在任务执行之后。你能更新注释以便我能将其标记为@crmk_Гcrmk_Ahh好的,那么你刚才在doFirst中调用了installDist吗?不,只是在def libdir
块上使用了doFirst。无需显式调用javaexec@crmk_ГБcrmk_ahhOK。其实我并没有帮上忙,我不应该因此而得到任何赞扬。用你自己的答案来解释答案,我会投赞成票:)不用担心,只要有一个对其他人有效的答案就行了。非常感谢。