50

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

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

    project-1.0-SNAPSHOT.jar
    

    我们应该建造

    project-1.0-20090803125803.jar
    

    (其中 20090803125803只是YYYYMMDDHHMMSS构建 jar 的时间戳)。

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

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

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

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

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

4

6 回答 6

60

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

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

有关更多详细信息,请参阅 Maven文档


对于较旧的 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>

三个 网站也值得一试。

于 2009-08-03T20:18:07.873 回答
41

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

有关更多信息,请参阅: http ://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

于 2009-08-17T11:00:12.877 回答
16

如果您需要 UTC 以外时区的时间(使用 时的默认值${maven.build.timestamp}),您可以使用build-helper-maven-plugin. 在有关如何使用 Build Helper Maven 插件目标的简要示例中查看更多信息。

无论如何,这就是我在 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>
于 2014-11-06T14:29:41.997 回答
16

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

使用 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

于 2015-02-02T15:02:19.377 回答
2

部署 SNAPSHOT 项目时,默认情况下使用时间戳,除非您在部署插件中覆盖它。如果您没有获得唯一的时间戳,则可能取决于您的 Maven 存储库的配置。正如另一个答案所说,使用时间戳或内部版本号插件进行发布。

于 2009-08-03T21:07:25.667 回答
1

我们需要一个更新的答案:) 它现在内置:http ://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

采用${maven.build.timestamp}

于 2016-07-01T06:39:22.090 回答