当我尝试在Zip类型的gradle任务的执行阶段创建zip文件时,未创建zip文件。
如果我在配置阶段执行相同的操作(省略doLast语句),则创建zip文件不会出现问题。
由于在输出日志中显示了println语句,因此将调用doLast块。
我们在执行阶段需要生成zip的原因是,需要压缩的文件是编译执行的结果。
我也尝试通过jar任务解决此问题,但这给了我类似的问题。
这是代码:
task createClassPathJar(type: Zip) {
dependsOn("createManifest")
from("${projectRoot}") {
include "MANIFEST.MF"
}
archiveName = "dummy.jar"
doLast {
destinationDir(file("${projectRoot}"))
archiveName = "zipfile.jar"
println "executing phase createClassPathJar. archiveName: " + archiveName
}
}
有人可以帮我吗?我正在使用Gradle v6.4.1。
最佳答案
您无法使用doLast
来配置任务的操作,因为在执行特定操作(在本例中为zipping)之后,将在之后执行来执行该任务。使用doFirst
闭包或以不依赖于其他配置的方式设置任务配置:
例如,根据您的任务createManifest
定义其输出的正确程度,您可以使用“Zip
”直接使用它来定义from createManifest
任务内容。
我猜您使用doLast
闭包的原因是对基于变量的destinationDir
的调用。取而代之的是,您可以只使用一个延迟计算变量的闭包:task createManifest {
outputs.file('path/to/MANIFEST.MF')
}
task createClassPathJar(type: Zip) {
from createManifest
archiveName = 'zipfile.jar'
destinationDir = file({ "${projectRoot}" }) // or just file({ projectRoot })
}
关于gradle - gradle zip任务仅在配置阶段创建zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61894117/