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

Cursor 配置 Java 环境:Windows 下 JDK+SpringBoot+Maven 黄金组合实战 Java 开发环境本质是编译、运行与调试三重能力的协同——JDK 提供字节码生成基础,SpringBoot 构建运行时上下文,Maven 管理依赖生命周期。在 Windows 平台,路径分隔符、JAVA_HOME 与 PATH 冲突、JDK 版本错配(如 SpringBoot 3.x 强制要求 JDK 17+)极易导致 'javac not found' 或 'Failed to load ApplicationContext' 等典型故障。Cursor 的工程驱动模式将 pom.xml 视为唯一真相源,通 阅读详情

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

png

把时间戳加到包名

两种方法不要重复,否则

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

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

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

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

参考资料

Reeds-Shepp曲线公式推导及代码实现-第二部分(共三部分) 文章目录2. Reeds-Shepp求解2.1 L+S+L+L^+S^+L^+L+S+L+2.2 L+S+R+L^+S^+R^+L+S+R+2.3 L+R−L+L^+R^-L^+L+R−L+2.4 L+R−L−L^+R^-L^-L+R−L−2.5 L+R+L−L^+R^+L^-L+R+L−2.6 L+Rβ+Lβ−R−L^+R_{\beta}^+L_{\beta}^-R^-L+Rβ+​Lβ−​R−2.7 L+Rβ−Lβ−R+L^+R_{\beta}^-L_{\beta}^-R^+L+Rβ−​Lβ−​R+2.8 阅读详情

相关推荐

Python小白也能玩转迅投QMT量化交易?手把手教你从安装到第一个策略

本文为零基础Python用户提供了上手迅投QMT量化交易平台的完整指南。从Python 3.6环境配置、QMT客户端获取安装,到核心概念讲解,并手把手教你编写并回测一个经典的双均线交易策略,帮助初学者快速迈出量化交易的第一步。

weixin_29103191的博客 763

去除pom.properties时间

#Generated by Maven #Mon Nov 13 16:49:24 CST 2017 version=1.0-SNAPSHOT如何去除上述中的默认时间输出?解决出处https://blog.holisticon.de/2016/10/reproducible-builds-in-java/ 使你的maven构建可重现: 有一天,Maven归档器可以支持这种行为 - 不需要额外的重新

gamer 2566

[语义分割]SPP、空洞卷积与ASPP总结

ASPP全称:Atrous Spatial Pyramid Pooling,中文可以理解为空洞空间卷积池化金字塔或者多孔空间金字塔池化。在这其中,要理解两个概念:一个是SPP,池化金字塔结构或者叫空间金字塔池化层,都是一个东西;另一个是Atrous,空洞卷积,两个加在一起就是ASPP。 首先说一下SPP:Spatial Pyramid Pooling。这个结构出自于论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Re

lipengfei0427的博客 2万+

springboot获取资源文件、编译文件路径(打包后)

File file=new File("src/main/resources/lib/unsafe/ProjectInterceptor.jar"); File file2=new File("target/classes/io/lib/xjar/XCryptos.class"); System.out.println(file.getName()); System.out.println(file2.getName());

卑微的码农 1883

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1075

Matlab TreeBagger实战:用随机森林预测房价的5个关键步骤(附完整代码)

本文详细介绍了使用Matlab的TreeBagger工具包构建随机森林模型预测房价的完整流程。通过波士顿房价数据集实战,涵盖数据预处理、模型构建、参数调优、特征重要性分析及高级应用(如分位数回归)等5个关键步骤,并附有完整代码,帮助读者快速掌握这一强大的回归分析工具。

ol789012的博客 444

springboot配置文件取pom打包时间

Spring Boot通过Maven资源过滤实现构建时间注入:1)在pom.xml中开启资源过滤,配置@分隔符;2)定义maven.build.timestamp时间格式;3)在配置文件中使用@变量@引用;4)代码中通过@Value获取。该方式便于追踪版本,默认时间格式为yyyyMMdd-HHmm,支持自定义。关键配置包括maven-resources-plugin插件和资源目录过滤设置,最终生成的应用配置文件中变量会被替换为实际构建时间。

手心朝下的博客 842

多模态轨迹预测:行人、车辆的交互式推理

多模态轨迹预测:行人、车辆的交互式推理 ,人工智能,计算机视觉,大模型,AI,本文围绕多模态轨迹预测中行人与车辆的交互式推理展开,介绍了其定义,即综合多种信息预测交通参与者未来多种轨迹。涵盖基础概念如轨迹表示、模态、交互关系,技术框架包括数据处理、特征提取、预测模型(物理、机器学习、深度学习模型等)及结果评估。还探讨了交互式推理方法、面临的不确定性处理等挑战、应用场景、未来发展方向、相关工具及实际案例,展现了该技术在智能交通等领域的重要性与发展潜力。​

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

Maven Springboot 项目打包jar包,package,在pom指定名称,指定时间戳

指定jar名称 在build标签下加 finalName 标签 <build> <finalName> jar包名 </finalName> <plugins> ......... </plugins> </build> <finalName>jar包名</finalName> 包名后加时间戳 1,在属性中指定时间戳格式 <properties> &l

kfepiza的博客 2098

什么是 PD 电压诱骗?

电压诱骗” 的意思就是,使用某些方法让 PD 充电器误以为设备需要更高的电压,从而让充电器提供比实际需要更高的电压。手机可能只需要 5V,但笔记本电脑可能需要 20V,通过 PD 协议,充电器能够根据设备的需求输出合适的电压和电流。在“电压诱骗”的情况下,你通过某种手段让充电器以为设备需要 12V,于是充电器会按照这个伪造的请求输出 12V,而不是默认的 5V。充电器评估自己的能力,如果可以提供设备需要的电压和电流,它会调整输出电压,从默认的 5V 切换到设备请求的电压(如 12V)。

qq_45430571的博客 2657

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7306

maven 打包时间戳问题

maven 打包时,可以生成时间戳属性,利用该属性来组装包名。 <version>5.0.${build.time}B</version> <properties> <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format> </properties> 对资源文件开启 filtering 功能,资源文件中的 POM 变量在打包过程中会被自动替

p1830095583的博客 3155

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3866

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

这篇文章首先介绍了在springboot中如何获得项目的编译时间和版本号,并向外提供接口,然后介绍了介绍了新版maven获得时间戳时区错误的解决方案,最后介绍了把时间戳加到包名的两种方法。springboot项目获得编译时间戳和版本号,然后提供接口大概分为以下步骤:在pom文件中获取maven的编译时间戳配置pom,用maven中的属性渲染资源文件application.yml提供接口maven中...

weixin_39688750的博客 1018

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

springboot 获取当前日期_详解SpringBoot获得Maven-pom中版本号和编译时间戳

这篇文章首先介绍了在SpringBoot中如何获得项目的编译时间和版本号,并向外提供接口,然后介绍了介绍了新版maven获得时间戳时区错误的解决方案,最后介绍了把时间戳加到包名的两种方法。SpringBoot项目获得编译时间戳和版本号,然后提供接口大概分为以下步骤:在pom文件中获取maven的编译时间戳配置pom,用maven中的属性渲染资源文件application.yml提供接口Maven中...

weixin_42137022的博客 1203

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

简介:为了在项目变更版本时查看是否变更成功 & 查看项目编译时间

Mona 2736

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

这篇文章首先介绍了在springboot中如何获得项目的编译时间和版本号,并向外提供接口,然后介绍了介绍了新版maven获得时间戳时区错误的解决方案,最后介绍了把时间戳加到包名的两种方法。springboot项目获得编译时间戳和版本号,然后提供接口大概分为以下步骤:在pom文件中获取maven的编译时间戳配置pom,用maven中的属性渲染资源文件application.yml提供接口maven中...

weixin_39599654的博客 638

【转】SpringBoot获得Maven-pom中版本号和编译时间戳详细步骤

中添加以下内容:

zhjmyx的专栏 1945

springboot 获取当前日期_SpringBoot获得Maven-pom中版本号和编译时间戳

在 pom文件properties中添加两个属性${maven.build.timestamp}yyyy-MM-dd HH:mm:ss用Maven属性渲染application.yml在pom文件build中配置src/main/resourcestrue在application.yml中配置app:version: @project.version@build:time: @timestamp@...

weixin_28862967的博客 945

接口查询SpringBoot版本和构建时间

SpringBoot查询构建时间和版本

Ikaros的博客 923

spring boot-获得Maven-pom中版本号

SpringBoot获得Maven-pom中版本号 SpringBoot获得Maven-pom中版本号和编译时间戳详细步骤 参考URL: https://blog.youkuaiyun.com/weixin_40618648/article/details/109530733

西京刀客 5733

boot项目每次编译自动获取日期生成版本号

项目中有个需求是每次编译,获取编译时间,作为版本号的一部分,搜集了网上很多方法,发现大部分都太老旧,已经在boot项目中不能使用了,但是都是基于插件,现把插件的使用贴上来 项目使用boot 1.5.8 ,pom.xml配置如下 <properties> <java.version>1.7</java.version> **&lt...

jc983433742的博客 1421

SpringBoot配置文件yml(或properties)使用pom.xml中的变量

yml中使用pom中的变量 在pom文件中增加(使用maven渲染yml) <build> <resources> <resource> <directory>src/main/resources</directory> ...

不如一默 2万+

springboot maven项目非main项目无法install

解决方法在该modul 的pom.xml上加入 <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...

爱情的错的博客 724
上一篇: 一行命令在Linux和Window间跨平台共享文件夹
下一篇: springboot多环境只打包指定环境的配置文件
zhaodongxx
博客等级 码龄12年 116粉丝 26原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值