即使在干净的构建之后,Gradle Zip任务也是最新的

时间:2016-10-25 15:54:14

标签: gradle groovy zip

我有以下任务定义。

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任务的输入触发新的运行吗?

1 个答案:

答案 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插件。