我想使用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
任务?
答案 0 :(得分:1)
您可以使用“ GString惰性评估” Groovy功能(请参见一些详细信息/示例here):
jar{
manifest {
attributes(
'Implementation-Version': "${->gitVersion.output()}" // use " ${->prop} syntax for lazy evaluation
)
}
}