默认情况下,所有gradle java项目都具有<!-- Customize header -->
<template id="custom_header" inherit_id="website.layout" name="Custom Header">
<!-- Assign an id -->
<xpath expr="//div[@id='wrapwrap']/header" position="attributes">
<attribute name="id">my_header</attribute>
</xpath>
<!-- Add an element after the top menu -->
<xpath expr="//div[@id='wrapwrap']/header/div" position="after">
<div class="container">
<div class="alert alert-info mt16" role="alert">
<strong>Welcome</strong> to our website!
</div>
</div>
</xpath>
</template>
属性。通常,这看起来像:
version
有没有办法制作&#34;版本&#34;这里定义的属性可用于构建的java代码吗?我希望在项目中有这样一个类:
allprojects {
apply plugin: 'java'
// ...
// configure the group and version for this project
group = 'org.example'
version = '0.2-SNAPSHOT'
}
我想这可以通过某种源代码生成来完成。或者让gradle将变量写入public class BuildVersion {
public static String getBuildVersion(){
return // ... what was configured in gradle when project was built
}
}
中的某种配置文件。是否有&#34;标准&#34; (即普遍接受的)在Gradle中这样做的方法?
答案 0 :(得分:26)
假设您的Gradle脚本正确地将version
插入到jar清单中,如图所示here:
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart',
'Implementation-Version': version
}
}
您的代码将能够从该jar清单文件中获取该版本:
public class BuildVersion {
public static String getBuildVersion(){
return BuildVersion.class.getPackage().getImplementationVersion();
}
}
或者,编写Gradle任务以创建包含其中版本的属性文件,并将该生成的属性文件包含在jar文件中,然后使用getResouceAsStream()
访问它。
您当然也可以从Gradle任务生成BuildVersion.java
文件,并将版本直接嵌入为字符串文字,并确保任务在compile
任务之前运行。
但是我建议只使用你将要包含的版本号(清单文件),它完全支持Gradle写入它和Java Runtime读取它,没有任何自定义Gradle任务或Java文件读数。