簡體   English   中英

如何將時間戳信息添加到 Maven 工件?

[英]How do I add time-stamp information to Maven artifacts?

我正在升級一個大型構建系統以使用 Maven2 而不是 Ant,我們有兩個相關的要求我堅持:

  1. 我們需要生成一個帶時間戳的工件,因此是打包階段(或任何地方)的一部分,而不是構建

    project-1.0-SNAPSHOT.jar

    我們應該建造

    project-1.0-20090803125803.jar

    (其中20090803125803只是構建 jar 時的YYYYMMDDHHMMSS時間戳)。

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

  2. 相同的時間戳必須包含在生成的 jar 中的version.properties文件中。

當您運行時,此信息包含在生成的pom.properties中,例如mvn package ,但被注釋掉:

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

關於從哪里開始的任何想法都會有所幫助! 謝謝!

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>

三個網站也值得一試。

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

有關更多信息,請參閱: http ://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

這篇文章(尤其是下面的部分)對於這個問題也非常有用和實用。

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

如果您需要 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>

部署 SNAPSHOT 項目時,默認情況下使用時間戳,除非您在部署插件中覆蓋它。 如果您沒有獲得唯一的時間戳,則可能取決於您的 Maven 存儲庫的配置。 正如另一個答案所說,使用時間戳或內部版本號插件進行發布。

我們需要一個更新的答案:) 它現在內置: http ://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

使用${maven.build.timestamp}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM