我正在升级一个大型构建系统以使用Maven2而不是Ant,我们有两个相关的要求,我坚持:
我们需要生成带时间戳的工件,因此包的一部分 阶段(或任何地方),而不是建立
project-1.0-SNAPSHOT.jar
我们 应该建立
project-1.0-20090803125803.jar
(其中
20090803125803
只是罐子的YYYYMMDDHHMMSS
时间标记
建)。
唯一真正的要求是时间戳是其中的一部分 生成文件的文件名。
version.properties 文件中必须包含相同的时间戳 在生成的jar中。
运行时,此信息包含在生成的 pom.properties 中,
例如,mvn package
但已被注释掉:
#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009
任何关于从哪里开始的想法都会有所帮助!谢谢!
答案 0 :(得分:45)
Maven版本2.1.0-M1或更新版本内置了特殊变量maven.build.timestamp
。
<build>
<finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>
有关详细信息,请参阅Maven documentation。
对于较旧的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>
答案 1 :(得分:38)
如果您使用的是Maven&gt; = 2.1.0-M1的版本,那么您可以使用$ {maven.build.timestamp}属性。
有关详细信息,请参阅: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
答案 2 :(得分:16)
如果您需要UTC以外的时区(使用${maven.build.timestamp}
时的默认值),则可以使用build-helper-maven-plugin
。请参阅Brief examples on how to use the Build Helper Maven Plugin's goals。
无论如何,这就是我在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>
答案 3 :(得分:8)
这篇文章(尤其是以下部分)对于这个问题也非常有用和实用。
Stamping Version Number and Build Time in a Properties File with Maven
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
答案 4 :(得分:2)
部署SNAPSHOT项目时,默认使用时间戳,除非您在deploy plugin中覆盖它。如果您没有获得唯一的时间戳,则可能是Maven存储库的配置。正如另一个答案所说,使用timestamp或buildnumber插件发布。
答案 5 :(得分:1)
我们需要更新的答案:) 它现在正在构建:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
使用${maven.build.timestamp}