Gradle:为Java提供构建版本

时间:2016-06-05 14:08:51

标签: java gradle build version

默认情况下,所有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中这样做的方法?

1 个答案:

答案 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文件读数。