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

Rya*_*yan 37 java ant maven-2 upgrade

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

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

    project-1.0-SNAPSHOT.jar
    
    Run Code Online (Sandbox Code Playgroud)

    我们应该建设

    project-1.0-20090803125803.jar
    
    Run Code Online (Sandbox Code Playgroud)

    (这 20090803125803只是YYYYMMDDHHMMSS罐子制造时的时间戳).

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

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

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

#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009
Run Code Online (Sandbox Code Playgroud)

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

Juh*_*älä 48

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

<build>
  <finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)

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


对于较旧的Maven版本,请查看maven-timestamp-pluginbuildnumber-maven-plugin.

如果你使用maven-timestamp-plugin,你可以使用这样的东西来操作产生的工件名称.

<build>
   <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)

而buildnumber-maven-plugin的这个配置应该创建一个$ {timestamp}属性,该属性包含时间戳值.似乎没有办法直接使用此插件创建version.properties文件.

<configuration>
   <format>{0,date,yyyyMMddHHmmss}</format>
   <items>
      <item>timestamp</item>
   </items>

</configuration>
Run Code Online (Sandbox Code Playgroud)

三个 网站也值得一试.

  • 以防万一有些人对我这样的老答案感到困惑:它现在是内置的:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables (3认同)

小智 38

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

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

  • 这将始终以UTC格式产生时间,如果你想在另一个时区使用`build-helper-maven-plugin`插件:在[http://mojo.codehaus.org/build-中搜索*timezone*辅助-行家-插件/ usage.html中](http://mojo.codehaus.org/build-helper-maven-plugin/usage.html). (3认同)
  • 我更喜欢这个,因为不需要插件. (2认同)

lmi*_*lmh 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>
Run Code Online (Sandbox Code Playgroud)


mcv*_*vkr 9

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

使用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>
....
Run Code Online (Sandbox Code Playgroud)

并且包名是 MyProject-1.0. 0-2015_03_02_13_46.war