Grails 在编译之前修改Gradle build中的Groovy源代码

Grails 在编译之前修改Gradle build中的Groovy源代码,grails,groovy,Grails,Groovy,我有一个用Gradle构建的Groovy应用程序。像往常一样,我在build.gradle脚本中定义了应用程序版本号/字符串 现在我想在Groovy应用程序中使用这个版本字符串,作为硬编码的静态信息。例如,作为主应用程序类中的最终静态成员: class MyApp { final static APP_VERSION = "0.1" } 由于版本信息来自build.gradle脚本,因此在编译源代码之前,上面的Groovy类成员需要由gradle设置 换句话说:我需要一个Gradle任

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

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

class MyApp {
    final static APP_VERSION = "0.1"
}
由于版本信息来自build.gradle脚本,因此在编译源代码之前,上面的Groovy类成员需要由gradle设置

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


如何实现这一点,有什么最佳实践的想法吗?

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

另一个选项是,如果您将应用程序打包在jar/war中,您可以从清单文件中获取应用程序的版本,但如果您从IDE启动应用程序,它将不起作用

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

该类是否包含除版本之外的任何内容?有什么原因不能从属性文件中读写它吗?@DylanBijnagte:我想硬编码版本,但不想在运行时从文件中读。是的,除了这个版本属性之外,这个类还包含其他代码。如果这个文件是最小的,我会说它是模板,否则我想你可能会被正则表达式解决方案卡住。创建一个只有这个值的MyAppVersion类文件怎么样。MyApp引用了MyAppVersion,但在编译之前,您可以将MyAppVersion全部替换为Gradle版本。那么就不需要regexp了。@ToddWCrone:Hmmm。。。我想这是一个很好的方法,谢谢。好吧,使用AST可能会奏效。但对于这个简单的任务来说,这感觉有点过头了,不是吗?我不得不同意。这就像用喷火器点燃香烟一样。