2014-10-26 69 views
0

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

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

class MyApp { 
    final static APP_VERSION = "0.1" 
} 

由于版本信息来自build.gradle脚本,即Groovy类部件的上方需要由摇篮设置源都编译之前。换句话说:我需要一个Gradle任务,它允许我在Groovy源代码中设置变量的值,然后由Gradle构建它。我可以通过正则表达式搜索该值,并将其替换为Groovy源文件,但感觉有点笨拙。

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

+2

该类是否包含除版本以外的任何内容?有没有理由你不能从属性文件中读取它? – 2014-10-27 01:24:14

+0

@DylanBijnagte:我想对版本进行硬编码,但不在运行时从文件中读取。是的,该类包含此版本属性旁边的其他代码。 – Matthias 2014-10-27 10:09:52

+0

如果文件很小,我会说它的模板,否则我认为你可能会卡在正则表达式的解决方案。 – 2014-10-27 11:44:58

回答

0

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

另一种选择,如果你包在JAR /战争中的应用, - 你可以从一个版本的应用程序清单文件(但是如果您从IDE启动应用程序,则它不起作用)

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

那么,使用AST它可能工作。但是这对于这个简单的任务来说感觉有点像矫枉过正,不是吗? – Matthias 2014-10-27 21:53:31

+0

我不得不同意。 AST转换就像用火焰喷射器点燃香烟一样。 – 2014-10-27 22:57:48