我正在尝试在gradle构建中将ZIP文件包含在TAR文件中。我不是疯了,这是复制现有的蚂蚁脚本,我不能因各种商业原因改变发行版布局。
这是我的总体布局
task buildZip(type: Zip) {
gradle.taskGraph.whenReady {
// build zip file usual way with from blocks
from(...) {
}
from(...) {
}
}
doLast {
println "ZIP ready"
// could I call tar task from here??
}
}
task buildTar(type: Tar, dependsOn: buildZip) {
println "Building TAR"
from (buildZip.archivePath) {
}
... more stuff, installer script etc.
}
输出我看到gradle:buildTar,即在构建ZIP之前构建TAR。
Building TAR
ZIP ready
更新
下面的Perryn Fowler评论正确地指出了问题,它是基于我对gradle中的执行与配置的误解。
在Tar,Tar任务正在进行之前,没有构建Tar 在执行Zip任务之前配置
更新
此问题不再需要,因为可以在ZIP任务中使用duplicatesStrategy选项,以避免问题被gradle.taskGraph.whenReady“修复”
答案 0 :(得分:2)
这个问题的答案实际上是由Perryn Fowler在最高评论中提供的,这是基于我对gradle中执行与配置的误解。我已创建此答案,因此问题已标记为已回答。另一个答案只是通过指向用户指南的链接来解释原始问题。
在Tar,Tar任务正在进行之前,没有构建Tar 在执行Zip任务之前配置
即。特殊任务中的任何嵌套命令,例如Zip,Tar等运行和配置时间,后来执行from块。
答案 1 :(得分:1)
此处您有一个示例工作解决方案:
<强>的build.gradle 强>:
task buildZip(type: Zip) {
from 'dir'
destinationDir project.file('build/zip')
archiveName 'lol.zip'
}
task buildTar(type: Tar, dependsOn: buildZip) {
from 'build/zip'
include '*.zip'
destinationDir project.file('build/tar')
archiveName 'lol.tar'
}
这对你来说是否清楚?
P.S。我认为你最好先阅读userguide。