1. 程式人生 > 程式設計 >詳解SpringBoot獲得Maven-pom中版本號和編譯時間戳

詳解SpringBoot獲得Maven-pom中版本號和編譯時間戳

這篇文章首先介紹了在SpringBoot中如何獲得專案的編譯時間和版本號,並向外提供介面,然後介紹了介紹了新版maven獲得時間戳時區錯誤的解決方案,最後介紹了把時間戳加到包名的兩種方法。

SpringBoot專案獲得編譯時間戳和版本號,然後提供介面大概分為以下步驟:

  • 在pom檔案中獲取maven的編譯時間戳
  • 配置pom,用maven中的屬性渲染資原始檔application.yml
  • 提供介面

Maven中獲得編譯時間

在 pom檔案properties 中新增兩個屬性

<properties>
 <!--maven.build.timestamp儲存了maven編譯時間戳-->
 <timestamp>${maven.build.timestamp}</timestamp>
 <!--指定時間格式--> 
 <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
</properties>

用Maven屬性渲染application.yml

在pom檔案build中配置

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

在application.yml中配置

不能使用${}

app:
 version: @project.version@
 build:
 time: @timestamp@

提供介面

建立AppController,提供介面 Get /app

package cn.yshow.modules.sys.controller;

import cn.yshow.common.utils.restResult.RestResult;
import cn.yshow.common.utils.restResult.ResultGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zhaod [email protected]
 * @version v1.0
 * @since 2018/12/16 16:19
 */
@Slf4j
@RestController
@RequestMapping("/app")
public class AppController {
 /**
  * 當前版本
  */
 @Value("${app.version}")
 private String version;
 /**
  * 打包時間
  */
 @Value("${app.build.time}")
 private String buildTime;

 @GetMapping
 public RestResult uploadImg() {
  Map<String,String> ret = new HashMap<>();
  ret.put("version",version);
  ret.put("buildTime",buildTime);
  
  //RestResult是我封裝的返回物件
  return ResultGenerator.genSuccessResult(ret);
 }
}

測試

用YAPI測試如下

maven.build.timestamp時區錯誤解決方案

在Maven 3.2.2+中, maven.build.timestamp已被重新定義,顯示UTC中的時間,比中國時間慢8個小時。可以使用外掛build-helper-maven-plugin獲得本時區的時間

在plugins塊新增外掛,這個配置與官網不一樣,按照官網的配置方式會報錯

<project>
 <build>
  <!--指定包名 -->
  <finalName>
   ${project.artifactId}-${project.version}-${build.time}
  </finalName>
  <plugins>
   <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>
     </execution>
    </executions>
    <configuration>
     <name>build.time</name>
     <pattern>yyyy-MM-dd HH:mm</pattern>
     <timeZone>GMT+8</timeZone>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project> 

經過上述處理後,屬性${build.time}已經代表GMT-8時區的時間

application.yml配置如下

app:
 version: @project.version@
 build:
 time: @build.time@

IDEA 編譯專案不會呼叫 maven 生命週期,導致安裝的 plugin 不被執行。雖然 maven 自帶變數可以被替換,但是自定義變數卻不會被替換。

可以將 IDEA 的 Build 與 maven goal 繫結起來,在 build 之前執行 maven goal,IDEA 右側 Maven Projects -> LifeCycle -> compile 勾選 Execute After Build和Execute After Rebuild ,如下圖

把時間戳加到包名

兩種方法不要重複,否則

方法一:把時間戳加到版本號

<project>
 <versioin>
  0.0.5.${build.time}
 </version>
</project>

方法二:把時間戳直接加到包名

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

參考資料

maven 打包時間戳問題

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