详解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 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时区错误解决方案
在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>
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
- spring boot 配置文件pom.xml详解
- 搭建SpringBoot项目pom.xml文件insert的时候报错:Non-parseable POM D:\maven\repository\org\springframework\securit
- maven 编译spring-boot报错
- docker + maven + springBoot 编译打包
- spring boot学习——详解pom.xml
- springboot+maven打jar包运行java -jar,报错没有主清单属性;pom文件添加build修正问题
- spring boot的maven配置依赖详解
- 详解用maven搭建springboot环境的方法
- Spring Boot的Maven插件Spring Boot Maven plugin详解
- 详解SpringBoot时间参数处理完整解决方案
- [置顶] 【微框架实战】Maven+SpringBoot 短信接口详解与Demo
- linux 程序、动态库、静态库内部添加版本号和编译时间详解
- 详解Maven 搭建spring boot多模块项目(附源码)
- Springboot-mybatis-maven-generator详解优雅的结合
- SpringCloud和Springboot中的pom.xml文件的详解
- 利用Maven入手Spring Boot第一个程序详解
- Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
- Spring Boot 基于Maven 基础Pom.xml文件
- springboot+maven pom文件保错问题
- SpringBoot中maven的parent标签的来源与详解(二)