运行exec任务作为配置阶段的输入

时间:2018-12-19 12:26:12

标签: git gradle groovy

我想使用Gradle在清单文件中写入版本字符串。为此,我使用git describe。为了获得此字符串,我编写了一个exec任务:

task gitVersion(type: Exec) {
  commandLine 'git', 'describe'
  standardOutput = new ByteArrayOutputStream()
  ext.output = {
    return standardOutput.toString()
  }
}

如果我用它来处理资源,它就可以工作,例如:

processResources {
  dependsOn gitVersion
  filesMatching('build.properties') {
    expand 'buildVersion': "${gitVersion.output()}"
  }
}

很遗憾,如果我在jar任务中尝试此操作,将无法正常工作。

jar {
  manifest {
    attributes(
      // Other attributes
      'Implementation-Version': "${gitVersion.output()}" // Not working
    )
  }
}

根据我对Gradle Build Lifecycle的了解,这是因为jar任务是“配置阶段”,而exec任务是“执行阶段”。

在配置阶段是否可以执行exec任务?

1 个答案:

答案 0 :(得分:1)

您可以使用“ GString惰性评估” Groovy功能(请参见一些详细信息/示例here):

jar{
    manifest {
        attributes( 
            'Implementation-Version': "${->gitVersion.output()}" // use " ${->prop} syntax for lazy evaluation
        )
    }
}