当我尝试在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。
答案 0 :(得分:0)
尝试使用doFirst
而不是doLast
:
task createClassPathJar(type: Zip) {
dependsOn("createManifest")
from("${projectRoot}") {
include "MANIFEST.MF"
}
archiveName = "dummy.jar"
doFirst {
destinationDir(file("${projectRoot}"))
archiveName = "zipfile.jar"
println "executing phase createClassPathJar. archiveName: " + archiveName
}
}
我不知道您的情况,但我尝试通过在doFirst
块中将存档名称更改为当前时间来尝试自己,存档名称实际上与执行时间匹配,而不与配置时间匹配。 / p>
答案 1 :(得分:0)
您不能使用doLast
来配置任务的操作,因为它将在特定操作(在本例中为压缩)运行后之后执行。使用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 })
}