我有以下任务定义。
task generateFile {
def file = new File("$buildDir/setclasspath.sh")
outputs.file(file)
doLast {
file.text = "sample"
}
}
和
task createDistro(type: Zip, dependsOn: ['jar', 'generateFile']) << {
from generateFile {
fileMode = 0755
into 'bin'
}
}
问题是当我运行gradle clean build
generateFile任务运行时,但zipFile任务没有运行。
为什么会这样?不应该干净,使Zip任务的输入触发新的运行吗?
答案 0 :(得分:1)
您需要先了解Gradle的各个阶段。主要记住有CONFIG和EXECUTION阶段。这是您之前的问题:Gradle clean erasing my file prior to ZIP task execution
你在createDistro
犯了同样的错误。当您使用<<
时,您只将任务减少到doLast
,并且在执行阶段运行。这意味着您的Zip任务尚未配置from
部分。所以正确的定义应该是:
apply plugin: 'java'
task generateFile {
def file = new File("$buildDir/setclasspath.sh")
outputs.file(file)
doLast {
file.createNewFile() // you need to actually create the file first
file.text = "sample"
}
}
task createDistro(type: Zip, dependsOn: ['jar', 'generateFile']) {
// this is the configuration of Zip task, do not run it in doLast or '<<'
from generateFile {
fileMode = 0755
into 'bin'
}
}
此外,正如@RaGe在评论中提到的那样,任务不会运行。您需要将其插入任务树中。
但我认为您仍在尝试解决您可能不需要解决的问题。根据您的工作,您最好使用gradle distribution插件。