Gradle 如何使用taskGraph.whenReady闭包一个接一个地运行任务
我试图在gradle构建的TAR文件中包含一个ZIP文件。我不是疯了,这是为了复制一个现有的ant脚本,我不能因为各种业务原因更改分发布局Gradle 如何使用taskGraph.whenReady闭包一个接一个地运行任务,gradle,build.gradle,Gradle,Build.gradle,我试图在gradle构建的TAR文件中包含一个ZIP文件。我不是疯了,这是为了复制一个现有的ant脚本,我不能因为各种业务原因更改分发布局 我不得不使用whenReady闭包来避免出现问题 whenReady意味着直到buildTar任务完成后才构建ZIP文件,即使buildTar依赖于buildZip 我不能直接调用tar{},因为gradle不支持这一点 Gradle似乎不支持直接调用任务 这是我的总布置图 task buildZip(type: Zip) { gradle.tas
- 我不得不使用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中执行与配置的误解
Tar不是在Zip之前构建的,Tar任务是 在执行Zip任务之前配置 更新
此问题不再需要,因为ZIP任务中可以使用选项duplicatesStrategy,以避免gradle.taskGraph“修复”此问题。当您准备好时,这里有一个示例工作解决方案: 构建.渐变:
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'
}
你明白了吗
另外,我认为这是一个好主意,你可以阅读。这里有一个工作解决方案示例: 构建.渐变:
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'
}
你明白了吗
另外,我认为这是一个好主意,你可以阅读。这里有一个工作解决方案示例: 构建.渐变:
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'
}
你明白了吗
另外,我认为这是一个好主意,你可以阅读。这里有一个工作解决方案示例: 构建.渐变:
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'
}
你明白了吗
另外,我认为这对你来说是个好主意。这个问题的答案实际上是由Perryn Fowler在顶部评论中提供的,这是基于我对gradle中执行与配置的误解。我已经创建了这个答案,所以问题被标记为已回答。另一个答案简单地解释了原始问题,并带有指向userguide的链接
Tar不是在Zip之前构建的,Tar任务是 在执行Zip任务之前配置
i、 e.运行特殊任务中的任何嵌套命令,例如Zip、Tar等,配置时,稍后执行from块 这个问题的答案实际上是由Perryn Fowler在顶部评论中提供的,这是基于我对gradle中执行与配置的误解。我已经创建了这个答案,所以问题被标记为已回答。另一个答案简单地解释了原始问题,并带有指向userguide的链接
Tar不是在Zip之前构建的,Tar任务是 在执行Zip任务之前配置
i、 e.运行特殊任务中的任何嵌套命令,例如Zip、Tar等,配置时,稍后执行from块 这个问题的答案实际上是由Perryn Fowler在顶部评论中提供的,这是基于我对gradle中执行与配置的误解。我已经创建了这个答案,所以问题被标记为已回答。另一个答案简单地解释了原始问题,并带有指向userguide的链接
Tar不是在Zip之前构建的,Tar任务是 在执行Zip任务之前配置
i、 e.运行特殊任务中的任何嵌套命令,例如Zip、Tar等,配置时,稍后执行from块 这个问题的答案实际上是由Perryn Fowler在顶部评论中提供的,这是基于我对gradle中执行与配置的误解。我已经创建了这个答案,所以问题被标记为已回答。另一个答案简单地解释了原始问题,并带有指向userguide的链接
Tar不是在Zip之前构建的,Tar任务是 在执行Zip任务之前配置
i、 e.运行特殊任务中的任何嵌套命令,例如Zip、Tar等,配置时,稍后执行from块 Tar不是在Zip之前构建的,Tar任务是在Zip任务执行之前配置的。请参阅@Perrynfoller,你能添加你的评论作为答案吗?我会接受。Tar不是在Zip之前生成的,Tar任务是在Zip任务执行之前配置的。请参阅@Perrynfoller,你能添加你的评论作为答案吗?我会接受。Tar不是在Zip之前生成的,Tar任务是在Zip任务执行之前配置的。请参阅@Perrynfoller,你能添加你的评论作为答案吗?我会接受。Tar不是在Zip之前生成的,Tar任务是在Zip任务执行之前配置的。请参见@Perrynfoller,您是否可以添加您的评论作为答案,我将接受。不幸的是,我需要使用gradle.taskGraph.whenReady,原因如原始问题中的链接所述。我已经阅读了用户指南…好吧。请您准备一份SSCCE以尝试更好地理解需求,而不是
gradle.taskGraph.whenReady{from…}
,应该使用from{…}
。无论如何,这不会改变任何基本的东西buildTar
应该使用buildZip中的,这也使得显式的dependsOn
变得不必要。@PeterNiederwieser gradle.taskGraph.whenReady仅用于解决中的问题,如果您有其他解决方案,请告诉我!正如我已经说过的,{…}
中的应该改为使用(注意大括号)。不幸的是,我需要使用gradle.taskGraph.whenReady,原因如原始问题中的链接所述。我已经阅读了用户指南…好吧。你能准备一份SSCCE来试着理解要求吗