[英]How do I add time-stamp information to Maven artifacts?
我正在升級一個大型構建系統以使用 Maven2 而不是 Ant,我們有兩個相關的要求我堅持:
我們需要生成一個帶時間戳的工件,因此是打包階段(或任何地方)的一部分,而不是構建
project-1.0-SNAPSHOT.jar
我們應該建造
project-1.0-20090803125803.jar
(其中20090803125803
只是構建 jar 時的YYYYMMDDHHMMSS
時間戳)。
唯一真正的要求是時間戳是生成文件的文件名的一部分。
相同的時間戳必須包含在生成的 jar 中的version.properties文件中。
當您運行時,此信息包含在生成的pom.properties中,例如mvn package
,但被注釋掉:
#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009
關於從哪里開始的任何想法都會有所幫助! 謝謝!
Maven 2.1.0-M1 或更新版本已內置特殊變量maven.build.timestamp
。
<build>
<finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>
有關更多詳細信息,請參閱 Maven 文檔。
對於較舊的 Maven 版本,請查看maven-timestamp-plugin或buildnumber-maven-plugin 。
如果您使用 maven-timestamp-plugin,您可以使用類似的東西來操作生成的工件名稱。
<build>
<finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
</build>
buildnumber-maven-plugin 的這個配置應該創建一個包含時間戳值的 ${timestamp} 屬性。 似乎沒有辦法直接使用此插件創建version.properties文件。
<configuration>
<format>{0,date,yyyyMMddHHmmss}</format>
<items>
<item>timestamp</item>
</items>
</configuration>
如果您使用 Maven >= 2.1.0-M1 的版本,則可以使用 ${maven.build.timestamp} 屬性。
有關更多信息,請參閱: http ://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
這篇文章(尤其是下面的部分)對於這個問題也非常有用和實用。
pom看起來像這樣
...
<properties>
....
<!-- Timestamp of build -->
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy_MM_dd_HH_mm</maven.build.timestamp.format>
</properties>
...
<build>
<finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
....
</plugin>
</plugins>
</build>
....
包名是MyProject-1.0.0-2015_03_02_13_46.war
如果您需要 UTC 以外的時區時間(使用${maven.build.timestamp}
時的默認值),您可以使用build-helper-maven-plugin
。 在 有關如何使用 Build Helper Maven 插件目標的簡要示例中查看更多信息。
無論如何,這就是我在 GMT-5 中獲得時間戳並將其放在我的工件的最終名稱中的方式:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>current.time</name>
<pattern>yyyyMMdd-HHmmss</pattern>
<timeZone>GMT-5</timeZone>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<finalName>${project.name}-${current.time}</finalName>
</configuration>
</plugin>
</plugins>
</build>
部署 SNAPSHOT 項目時,默認情況下使用時間戳,除非您在部署插件中覆蓋它。 如果您沒有獲得唯一的時間戳,則可能取決於您的 Maven 存儲庫的配置。 正如另一個答案所說,使用時間戳或內部版本號插件進行發布。
我們需要一個更新的答案:) 它現在內置: http ://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
使用${maven.build.timestamp}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.