【问题标题】:Modify Groovy sources from Gradle build before compiling在编译之前从 Gradle 构建中修改 Groovy 源
【发布时间】:2014-12-22 03:22:07
【问题描述】:

我有一个使用 Gradle 构建的 Groovy 应用程序。像往常一样,我在build.gradle 脚本中定义了应用程序版本号/字符串。

现在我想在 Groovy 应用程序中使用该版本字符串,作为硬编码的静态信息。例如作为主应用程序类中的final static 成员:

class MyApp {
    final static APP_VERSION = "0.1"
}

由于版本信息来自build.gradle 脚本,上述Groovy 类成员需要在编译源代码之前由Gradle 设置。

换句话说:我需要一个 Gradle 任务,它允许我在 Groovy 源代码中设置变量的值,然后再由 Gradle 构建它们。我可以通过正则表达式搜索该值并在 Groovy 源文件中替换它,但这感觉有点笨拙。

任何“最佳实践”想法如何实现?

【问题讨论】:

  • 该类是否包含除版本之外的任何内容?是否有某些原因您不能从属性文件中写入读取它?
  • @DylanBijnagte:我想对版本进行硬编码,但不想在运行时从文件中读取它。是的,该类确实包含此版本属性之外的其他代码。
  • 如果文件很小,我会说它是模板,否则我认为您可能会被正则表达式解决方案卡住。
  • 如何创建一个仅包含此值的 MyAppVersion 类文件。 MyApp 引用 MyAppVersion 但您在编译之前将 MyAppVersion 替换为 Gradle 构建。那么就不需要正则表达式了。
  • @ToddWCrone:嗯...我想这是一个不错的方法,谢谢。

标签: grails groovy


【解决方案1】:

我不能给你最终的解决方案,但是,我认为,你应该看看AST Transformations

另一种选择,如果您将应用程序打包到 jar/war 中, - 您可以从清单文件中获取应用程序的版本(但如果您从 IDE 启动应用程序,它将不起作用)

final static versin = MyApp.class.getPackage().getSpecificationVersion()

【讨论】:

  • 好吧,使用 AST 可能会奏效。但是对于这个简单的任务,感觉有点矫枉过正,不是吗?
  • 我必须同意。对此的 AST 转换就像用火焰喷射器点燃香烟。
猜你喜欢
  • 1970-01-01
  • 2019-04-21
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多