1. 程式人生 > 程式設計 >maven 打包時間戳問題

maven 打包時間戳問題

maven 打包時,可以生成時間戳屬性,利用該屬性來組裝包名。

<version>5.0.${build.time}B</version>
<properties>
 <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
</properties>

對資原始檔開啟 filtering 功能,資原始檔中的 POM 變數在打包過程中會被自動替換。在 java 程式碼中訪問 properties 資原始檔,就可以取到版本號。

<resource>
 <directory>src/main/resources</directory>
 <filtering>true</filtering>
</resource>

但是,這個時間戳屬性有個問題,生成的時間 ${maven.build.timestamp} 是 UTC 時間,無法修改時區。網上找到一個辦法,可以用外掛解決這個問題。

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>build-helper-maven-plugin</artifactId>
 <version>1.8</version>
 <executions>
  <execution>
   <id>timestamp-property</id>
   <goals>
    <goal>timestamp-property</goal>
   </goals>
   <configuration>
    <name>build.time</name>
    <pattern>yyyyMMdd'.'HHmm</pattern>
    <timeZone>GMT+8</timeZone>
   </configuration>
  </execution>
 </executions>
</plugin>

該外掛生成的屬性 ${build.time} 已經是本地時區。

但是,在 IDEA 中, Build Projects ,再 Build Artifacts... ,屬性檔案中的 ${project.version} 並沒有被替換。

摸索了一陣,發現 IDEA Build Projects 並不會呼叫 maven 生命週期,導致 plugin 不被執行。雖然 maven 自帶變數可以被替換,但是自定義變數卻不會被替換。

使用工具按鈕的 maven install 打包,資源中的變數可以被正常替換。

還有一個方法,可以將 IDEA 的 Build 與 maven goal 繫結起來:

圖1 繫結 maven goal

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。