将SVN和版本插入war文件的最佳做法是什么?

时间:2016-07-21 08:48:22

标签: maven

使用Maven时,在war文件中嵌入产品版本和svn url + revision的推荐方法是什么?我应该在建造期间将它插入pom中,如果是这样,在哪个部分?一个例子会有所帮助。

2 个答案:

答案 0 :(得分:1)

要获取这些信息,您可以使用buildnumber-maven-plugin来提取svn版本信息。通过使用这些属性,您可以将这些值放入MANIFEST.MF文件或在构建过程中过滤的单独文件中。或者,您可以通过templating-maven-plugin创建一个包含此类信息的Java类。

答案 1 :(得分:0)

好吗

我的java资源文件夹中有一个version.properties文件,其中包含以下内容:

version.major=${version}
version.build=${env.SVN_REVISION}
version.date=${buildtime}

然后,在我的pom.xml中,我有这个

<properties>
    <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
    <buildtime>${maven.build.timestamp}</buildtime>
    <project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
</properties>

并且要读取在构建.war时填写的信息,我在会话bean上获得了这个属性字段:

@ManagedProperty(value = "#{versionProperties}")
private Properties versionProperties;

并填写

private void initializeVersionData() {
    String mavenTimestamp = getVersionProperties().getProperty("version.date");
    // try to parse timestamp and reformat it
    try {
        // format of maven timestamp
        DateTimeFormatter mavenFormatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmm");
        LocalDateTime date = LocalDateTime.parse(mavenTimestamp, mavenFormatter);
        // desired format
        DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        versionData.put("Datum", date.format(desiredFormatter));
    } catch (RuntimeException e) {
        logger.warn("couldnt parse time stamp, ignore if running locally");
        // fall back to maven timestamp
        versionData.put("Datum", mavenTimestamp);
    }
    versionData.put("Version", getVersionProperties().getProperty("version.major"));
    versionData.put("Build", getVersionProperties().getProperty("version.build"));
}

不要忘记生成吸气剂。

从sessionbean读取值,我在页脚模板文件中得到了这个:

<div style="text-align:right;float:right;">
    &#169; 2016 it-processing AG
    <table style="width:120px;">
        <ui:repeat var="entry"
            value="#{sessionBean.version.entrySet().toArray()}"><br/>
            <h:panelGroup>
                <tr>
                    <td>#{entry.key}: </td>
                    <td>#{entry.value}</td>
                </tr>
            </h:panelGroup>
        </ui:repeat>
    </table>
</div>

,结果是:

result

对于svn url,您可以在属性文件中对其进行硬编码。

编辑:当您使用jenkins作为构建服务器时,可能只会填充其中一个属性,无法记住哪个属性可能是buildnumber