使用Maven时,在war文件中嵌入产品版本和svn url + revision的推荐方法是什么?我应该在建造期间将它插入pom中,如果是这样,在哪个部分?一个例子会有所帮助。
答案 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;">
© 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>
,结果是:
对于svn url,您可以在属性文件中对其进行硬编码。
编辑:当您使用jenkins作为构建服务器时,可能只会填充其中一个属性,无法记住哪个属性可能是buildnumber