如何将时间戳信息添加到 Maven 工件?
Posted
技术标签:
【中文标题】如何将时间戳信息添加到 Maven 工件?【英文标题】:How do I add time-stamp information to Maven artifacts? 【发布时间】:2010-11-16 11:57:19 【问题描述】:我正在升级一个大型构建系统以使用 Maven2 而不是 Ant,我们有两个相关的要求我坚持:
我们需要生成一个带时间戳的工件,所以 包的一部分 阶段(或任何地方),而不是构建
project-1.0-SNAPSHOT.jar
我们 应该正在建设中
project-1.0-20090803125803.jar
(其中
20090803125803
只是 jar 时的 YYYYMMDDHHMMSS
时间戳
建)。
唯一真正的要求是时间戳是 生成文件的文件名。
version.properties 文件中必须包含相同的时间戳 在生成的 jar 中。
运行时生成的pom.properties中包含此信息,
例如,mvn package
但被注释掉了:
#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009
任何关于从哪里开始的想法都会有所帮助!谢谢!
【问题讨论】:
【参考方案1】: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>
These three sites 也值得一试。
【讨论】:
您可以通过在 /src/main/resources 中存根并使用过滤来创建您的 version.properties 文件。然后在过滤器中使用 $timestamp 属性。诀窍是在应用过滤器之前创建 $timestamp 属性。 以防万一有人像我一样对这个旧答案绊倒:它现在内置:maven.apache.org/guides/introduction/… 但是$project.artifactId-$project.version-$timestamp
不会生成project-1.0-SNAPSHOT-20090803125803
吗?
可以通过声明遵循Java SimpleDateFormat
模式的属性maven.build.timestamp.format
来自定义构建时间戳的格式
不知道为什么,但是 Maven 的时间戳不使用当前时区,所以我不认为这个答案是一个解决方案【参考方案2】:
如果您使用的 Maven >= 2.1.0-M1 版本,则可以使用 $maven.build.timestamp 属性。
有关详细信息,请参阅: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
【讨论】:
我更喜欢这个,因为不需要插件。 如果您使用 maven-war-plugin,只需在配置中添加:<configuration>...<warName>$project.name-$project.version_$maven.build.timestamp</warName></configuration>
这将始终以 UTC 格式显示时间,如果您想要另一个时区的时间,请使用 build-helper-maven-plugin
插件:在 http://mojo.codehaus.org/build-helper-maven-plugin/usage.html 中搜索 timezone。跨度>
@lmiguelmh “这将始终以 UTC 格式显示时间” 我使用 Maven 3.0.5 和 $maven.build.timestamp
显示在本地时区,而不是 UTC。也许这是 Maven 最近的变化。【参考方案3】:
如果您需要 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>
【讨论】:
【参考方案4】:这篇文章(尤其是下面的部分)对于这个问题也非常有用和实用。
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
【讨论】:
帖子链接已损坏。有效的链接:dzone.com/articles/stamping-version-number-and【参考方案5】:部署 SNAPSHOT 项目时,默认情况下会使用时间戳,除非您在 deploy plugin 中覆盖它。如果您没有获得唯一的时间戳,则可能取决于您的 Maven 存储库的配置。正如另一个答案所说,使用时间戳或内部版本号插件进行发布。
【讨论】:
在这里不能这样工作。你能详细说明你的答案吗?【参考方案6】:我们需要一个更新的答案 :) 现已内置:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
使用$maven.build.timestamp
【讨论】:
以上是关于如何将时间戳信息添加到 Maven 工件?的主要内容,如果未能解决你的问题,请参考以下文章
将数据类的对象添加到 Kotlin 的 Firestore 时如何添加 Firebase 时间戳?