Java源代码的Gradle项目版本属性

时间:2014-02-13 08:51:17

标签: build gradle

在我的应用程序中,我将'user-frendly'版本维护为主类中的公共String常量。

是否可以在build.gradle中检索此变量以设置项目的version属性?目前我必须手动完成,当然会导致问题。

2 个答案:

答案 0 :(得分:3)

维护“用户友好”版本的正确方法是version.properties文件,存储在源树中。例如,在src/main/resources下。然后,您可以在Gradle脚本中加载此属性文件:

def config = new ConfigSlurper().parse(new File("src/main/resources/version.properties").toURL())
println(config.versionNumber)

答案 1 :(得分:1)

我已经加上了尼基塔的答案,这很棒。

但是,首先,File.toURL()现已弃用。这样的事情会更好:

ConfigObject conf = new ConfigSlurper().parse( file("src/main/resources/version.properties").toURI().toURL());

其次,请注意 file( ... ,而不是 new File( ... ,如果此行包含在build.gradle中。前者相对于Gradle项目的根目录路径生成File,实际上是Gradle interface Project的方法。值得一提的是,build.gradle中似乎“无处不在”的每个方法或属性实际上都是基础的,“不可见的”Gradle Project实例的方法或属性。

如果您将new File( "src/main... ")放在build.gradle中,就像在Nikita的回答中一样,如果从控制台运行您的Gradle任务,当前目录为项目/根目录,您实际上不会发现任何问题...但是(根据我的实验,例如,如果在Eclipse中使用GradleTasks窗口,那么您将创建一个相对于运行Eclipse的目录的File路径...这会给出一条错误消息“系统找不到指定的路径“。

因此,使用file( ...,您可以(在build.gradle中):

version = conf.versionNumber

NB version这是Project的另一个属性......但是如果你看一下Project的上面的Javadoc,你就会感到迷惑,因为它不存在!但是,您 会看到getVersion()setVersion(...)。使用Groovy,Groovy magic会自动为每个属性提供自己的getter和setter方法。我花了一个星期的时间学习一点Groovy,这实际上是一种很棒的语言,强烈建议你熟悉它,并使Gradle的学习曲线显着减少痛苦。

可以但是在Gradle类version here的DSL(特定于域的语言)API中找到Project属性。

文件version.properties通常包含以下内容:

versionNumber='1.0.0'

NB从您的代码访问版本 ...如果您想从应用代码(或测试代码)访问此版本号, 确实会使用{{ 1}}:

new File( ...

就像尼基塔的回答一样。