詳解SpringBoot獲得Maven-pom中版本號和編譯時間戳
這篇文章首先介紹了在SpringBoot中如何獲得項目的編譯時間和版本號,并向外提供接口,然后介紹了介紹了新版maven獲得時間戳時區(qū)錯誤的解決方案,最后介紹了把時間戳加到包名的兩種方法。
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@
提供接口
創(chuàng)建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 zhaodongxx@outlook.com
* @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時區(qū)錯誤解決方案
在Maven 3.2.2+中, maven.build.timestamp已被重新定義,顯示UTC中的時間,比中國時間慢8個小時??梢允褂貌寮uild-helper-maven-plugin獲得本時區(qū)的時間
在plugins塊添加插件,這個配置與官網(wǎng)不一樣,按照官網(wǎng)的配置方式會報錯
<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>
經(jīng)過上述處理后,屬性${build.time}已經(jīng)代表GMT-8時區(qū)的時間
application.yml配置如下
app: version: @project.version@ build: time: @build.time@
IDEA 編譯項目不會調(diào)用 maven 生命周期,導致安裝的 plugin 不被執(zhí)行。雖然 maven 自帶變量可以被替換,但是自定義變量卻不會被替換。
可以將 IDEA 的 Build 與 maven goal 綁定起來,在 build 之前執(zhí)行 maven goal,IDEA 右側(cè) 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>
參考資料
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Intellij IDEA 斷點不可用報錯 No executable 
這篇文章主要介紹了Intellij IDEA 斷點不可用報錯 No executable code found問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
mybatis-plus-boot-starter包與mybatis-plus-generator的沖突解決
本文主要介紹了mybatis-plus-boot-starter包與mybatis-plus-generator的沖突解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-10-10
mybatis-plus配置攔截器實現(xiàn)sql完整打印的代碼設計
在使用mybatis-plus(mybatis)的時候,往往需要打印完整的sql語句,然而輸出的日志不是很理想,因為sql語句中的關(guān)鍵字段信息都是用?來代替的,所以本文分享了一下自己寫了一個攔截器實現(xiàn)了sql完整的打印,需要的朋友可以參考下2024-06-06
Spring IOC簡單理解及創(chuàng)建對象的方式
這篇文章主要介紹了Spring IOC簡單理解及創(chuàng)建對象的方式,本文通過兩種方式給大家介紹創(chuàng)建對象的方法,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-09-09

