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

时间:2009-08-03 20:11:41

标签: java maven-2 ant upgrade

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

  1. 我们需要生成带时间戳的工件,因此包的一部分 阶段(或任何地方),而不是建立

    project-1.0-SNAPSHOT.jar
    

    我们 应该建立

    project-1.0-20090803125803.jar
    

    (其中 20090803125803只是罐子的YYYYMMDDHHMMSS时间标记 建)。

    唯一真正的要求是时间戳是其中的一部分 生成文件的文件名。

  2. version.properties 文件中必须包含相同的时间戳 在生成的jar中。

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

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

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

6 个答案:

答案 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-pluginbuildnumber-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也值得一试。

答案 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}