如何将时间戳信息添加到 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,只需在配置中添加:&lt;configuration&gt;...&lt;warName&gt;$project.name-$project.version_$maven.build.timestamp&lt;/warName&gt;&lt;/configuration&gt; 这将始终以 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 工件?的主要内容,如果未能解决你的问题,请参考以下文章

仅在项目发生更改时添加编译时间戳 (C)

将数据类的对象添加到 Kotlin 的 Firestore 时如何添加 Firebase 时间戳?

maven 打包,包名带时间戳

将数据从雪花卸载到 s3 时,如何将日期时间戳添加到 zip 文件?

如何将时间戳添加到列表视图?

如何将 pandas 时间戳添加到数据帧 post read_csv