我试图在渐变构建中的TAR文件中包含一个ZIP文件。我没有疯,这是为了复制现有的蚂蚁脚本,由于各种业务原因,我无法更改分发布局。
- 我不得不使用whenReady闭包来毫无问题地收集依赖项
- whenReady意味着在buildTar任务完成之后才构建ZIP文件,即使buildTar依赖于buildZip
- 我不能直接调用tar{},因为gradle不支持此操作
- Gradle似乎不支持直接调用任务
这是的总体布局
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,即TAR在ZIP构建之前构建。
Building TAR
ZIP ready
更新。
Perryn Fowler在下面的评论正确地指出了这个问题,这是基于我对gradle中执行与配置的误解。
柏油不是在Zip之前建造的,柏油任务是在Zip任务执行之前配置
更新。
不再需要此问题,因为选项重复可以在ZIP任务中使用策略,以避免问题被grade.taskGraph.whenReady "修复"
这个问题的答案实际上是由Perryn Fowler在顶部评论中提供的,这是基于我对gradle中执行与配置的误解。我已经创建了这个答案,所以问题被标记为已回答。另一个答案只是用用户指南的链接改写了原来的问题。
柏油不是在Zip之前建造的,柏油任务是在Zip任务执行之前配置
即,运行特殊任务中的任何嵌套命令,例如Zip、Tar等,并在配置时稍后执行from块。
这里有一个示例工作解决方案:
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'
}
你清楚吗?
附言:我认为你阅读用户指南是个好主意。