在我的应用程序中,我将'user-frendly'版本维护为主类中的公共String常量。
是否可以在build.gradle中检索此变量以设置项目的version属性?目前我必须手动完成,当然会导致问题。
答案 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( ...
就像尼基塔的回答一样。