详解SpringBoot获得Maven-pom中版本号和编译时间戳

作者:zhaodongxx 时间:2022-11-27 19:45:27 

这篇文章首先介绍了在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测试如下

详解SpringBoot获得Maven-pom中版本号和编译时间戳

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 ,如下图

详解SpringBoot获得Maven-pom中版本号和编译时间戳

把时间戳加到包名

两种方法不要重复,否则

方法一:把时间戳加到版本号


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

方法二:把时间戳直接加到包名


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

</project>

参考资料

maven 打包时间戳问题

来源:https://blog.csdn.net/dora_310/article/details/85038475

标签:Maven,pom,版本号,编译时间戳
0
投稿

猜你喜欢

  • Javaweb基础入门requse原理与使用

    2021-10-07 20:55:29
  • Mybatis插件之自动生成不使用默认的驼峰式操作

    2023-11-19 01:20:03
  • Mybatis查询多条记录并返回List集合的方法

    2023-08-08 05:16:48
  • Java 基于tcp协议实现文件上传

    2022-04-14 04:01:29
  • sqlite数据库的介绍与java操作sqlite的实例讲解

    2023-05-09 03:07:40
  • Java案例使用比较排序器comparator实现成绩排序

    2023-10-16 01:37:24
  • java中this的n种使用方法

    2023-12-23 13:13:23
  • 关于统计数字问题的算法

    2023-11-03 00:33:32
  • 如何解决修改StaticText的字体

    2023-05-25 08:40:14
  • 一文搞懂SpringBoot如何利用@Async实现异步调用

    2022-02-06 12:39:27
  • Androd 勇闯高阶性能优化之布局优化篇

    2023-01-22 12:12:15
  • C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    2023-02-24 18:41:44
  • spring框架cacheAnnotation缓存注释声明解析

    2022-04-14 17:13:05
  • Scala小程序详解及实例代码

    2023-03-29 12:10:56
  • Java创建树形结构算法实例代码

    2021-11-21 22:24:01
  • Java提取2个集合中的相同和不同元素代码示例

    2023-11-28 05:48:41
  • 深入讲解我们说的CAS自旋锁到底是什么

    2022-05-21 14:43:08
  • C#中Linq的去重方式Distinct详解

    2022-01-23 03:53:36
  • java开发ServiceLoader实现机制及SPI应用

    2022-12-24 09:55:05
  • 在IDEA里gradle配置和使用的方法步骤

    2023-11-23 16:07:58
  • asp之家 软件编程 m.aspxhome.com