如何向Maven工件添加时间戳信息?

问题描述 投票:36回答:6

我正在升级一个大型构建系统以使用Maven2而不是Ant,我们有两个相关的要求,我坚持:

  1. 我们需要生成一个带时间戳的工件,因此是包阶段(或任何地方)的一部分,而不是构建 project-1.0-SNAPSHOT.jar 我们应该建设 project-1.0-20090803125803.jar (其中20090803125803只是罐子制造时的YYYYMMDDHHMMSS时间戳)。 唯一真正的要求是时间戳是生成文件的文件名的一部分。
  2. 必须在生成的jar内的version.properties文件中包含相同的时间戳。

当您运行时,此信息包含在生成的pom.properties中,例如,mvn package但已被注释掉:

#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009

任何关于从哪里开始的想法都会有所帮助!谢谢!

java maven-2 ant upgrade
6个回答
46
投票

Maven版本2.1.0-M1或更新版本内置了特殊变量maven.build.timestamp

<build>
  <finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>

有关详细信息,请参阅Maven documentation


对于较旧的Maven版本,请查看maven-timestamp-pluginbuildnumber-maven-plugin

如果你使用maven-timestamp-plugin,你可以使用这样的东西来操作产生的工件名称。

<build>
   <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
</build>

而buildnumber-maven-plugin的这个配置应该创建一个$ {timestamp}属性,其中包含timestamp值。似乎没有办法直接使用此插件创建version.properties文件。

<configuration>
   <format>{0,date,yyyyMMddHHmmss}</format>
   <items>
      <item>timestamp</item>
   </items>

</configuration>

qazxsw poi qazxsw poi qazxsw poi也值得一试。


38
投票

如果您使用的是Maven> = 2.1.0-M1的版本,那么您可以使用$ {maven.build.timestamp}属性。

有关更多信息,请参阅:These


16
投票

如果您需要UTC以外的时区(使用 three 时的默认值),您可以使用sites。在http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables中查看更多信息。

无论如何,这就是我在GMT-5中获得时间戳并将其放在我的工件的最终名称中的方式:

${maven.build.timestamp}

8
投票

这篇文章(特别是下面的部分)对于这个问题也非常有用和实用。

build-helper-maven-plugin

pom看起来像这样

Brief examples on how to use the Build Helper Maven Plugin's goals

包名是 <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>


2
投票

部署SNAPSHOT项目时,默认使用时间戳,除非您在Stamping Version Number and Build Time in a Properties File with Maven中覆盖它。如果您没有获得唯一的时间戳,则可能是Maven存储库的配置。正如另一个答案所说,使用timestamp或buildnumber插件进行发布。


1
投票

我们需要一个更新的答案:)它现在正在构建:... <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

© www.soinside.com 2019 - 2024. All rights reserved.