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

标签 git gradle groovy

我想使用Gradle在 list 文件中写入版本字符串。为此,我使用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任务?

最佳答案

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

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

关于git - 运行exec任务作为配置阶段的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53851245/

相关文章:

git - GitHub 中的 Fork 和 Pull 模型是什么?

git - 为什么 vsdiffmerge 总是打开一个新的 VisualStudio 而不显示差异

git - 如何在 git 中将 7 个推送的提交压缩为 1 到 1?

git - 如何找到原名已知的重命名文件的新路径?

android - 脚本 'C:\tools\flutter\packages\flutter_tools\gradle\flutter.gradle' 行 : 1070

spring - Gradle 多模块项目 : Apply module dependency to all subprojects except for itself

spring - 使用Idea + Gradle无法导入AspectJRT和AspectWeaver Jar

java - 在基于java的插件中创建gradle任务

在 GStringImpl 上使用 equals() 和 == 的 Groovy 不同结果

java - 忽略日期范围的年份的最佳做法