当前位置: 首页 > news >正文

基于Maven的Spring Boot应用版本号获取解析

引言

在Spring Boot应用的开发和部署中,了解应用的版本号对于管理和监控应用至关重要。本文将深入解析一种基于Maven打包的Spring Boot应用中,根据不同的运行环境获取应用版本号的解决方案。在开始介绍代码之前,我们先来了解一下可能的文件目录结构,以及获取版本号的思路。

文件目录结构

JAR包运行环境

假设我们的应用被打包成了一个名为 myapp.jar 的可执行 JAR 文件。

myapp.jar
│
├── META-INF
│   └── maven
│       └── group
│           └── artifact
│               └── pom.properties
│
├── com
│   └── example
│       └── MyApp.class
│
└── ...

在这个结构中,META-INF/maven/group/artifact/pom.properties 文件包含了版本号信息。

IDE或文件系统运行环境

在IDE或文件系统中,应用以类文件的形式存在,目录结构可能如下:

project-root
│
├── target
│   └── classes
│       ├── com
│       │   └── example
│       │       └── MyApp.class
│       │
│       └── ...
│
├── maven-archiver
│   └── pom.properties
│
└── ...

在这个结构中,target/classes 目录包含了编译后的类文件,而 maven-archiver/pom.properties 文件包含了版本号信息。

有了这两种可能的文件结构,我们可以更清晰地理解下面介绍的代码解决方案。

JAR包运行环境

在JAR包运行环境中,应用被打包成一个可执行的JAR文件。以下是获取版本号的代码实现和思路:

if (classPath.startsWith("jar:")) {return getVersionFromJar(clazz);
}

getVersionFromJar 方法

private String getVersionFromJar(Class<?> clazz) {ProtectionDomain protectionDomain = clazz.getProtectionDomain();CodeSource codeSource = protectionDomain.getCodeSource();try (JarFile jarFile = new JarFile(codeSource.getLocation().getPath())) {Enumeration<JarEntry> entries = jarFile.entries();while (entries.hasMoreElements()) {JarEntry entry = entries.nextElement();if (entry.getName().startsWith("META-INF/maven/") && entry.getName().endsWith("/pom.properties")) {return extractVersion(jarFile.getInputStream(entry));}}} catch (IOException e) {e.printStackTrace();}return null;
}

在JAR包中,我们通过ProtectionDomainCodeSource获取JAR文件的路径,然后遍历JAR包中的条目,寻找包含版本信息的pom.properties文件。最终,调用extractVersion方法提取版本号。

IDE或文件系统运行环境

在IDE或文件系统运行环境中,应用通常以类文件的形式存在。以下是获取版本号的代码实现和思路:

else if (classPath.startsWith("file:")) {// 在IDE或文件系统中获取版本号// 省略部分代码...
}

获取文件路径

String basePath = classPath.substring(0, classPath.indexOf("/classes/"));
basePath = URLUtil.decode(FileUtil.normalize(basePath));

通过解析类文件的路径,我们可以得到应用在文件系统中的基本路径。

读取pom.properties文件

File propertiesFile = Paths.get(basePath, "maven-archiver", "pom.properties").toFile();
if (propertiesFile.exists()) {return extractVersion(FileUtil.getInputStream(propertiesFile));
}

根据基本路径构建pom.properties文件的路径,然后通过文件流获取其中的版本号信息。

结论

通过本文的介绍,我们详细解析了在不同环境下获取Spring Boot应用版本号的代码实现思路。这种灵活的解决方案能够确保在不同的部署环境中都能获取到正确的应用版本号,为开发者提供了更好的应用管理和监控手段。在实际应用中,可以根据这一思路进一步优化和定制,以适应特定的部署场景。

相关文章:

基于Maven的Spring Boot应用版本号获取解析

引言 在Spring Boot应用的开发和部署中&#xff0c;了解应用的版本号对于管理和监控应用至关重要。本文将深入解析一种基于Maven打包的Spring Boot应用中&#xff0c;根据不同的运行环境获取应用版本号的解决方案。在开始介绍代码之前&#xff0c;我们先来了解一下可能的文件目…...

LLM微调(二)| 微调LLAMA-2和其他开源LLM的两种简单方法

本文将介绍两种开源工具来微调LLAMA-2。 一、使用autotrain-advanced微调LLAMA-2 AutoTrain是一种无代码工具&#xff0c;用于为自然语言处理&#xff08;NLP&#xff09;任务、计算机视觉&#xff08;CV&#xff09;任务、语音任务甚至表格任务训练最先进的模型。 1&#xf…...

AVP对纵向控制ESP(Ibooster)的需求规范

目录 1. 版本记录... 3 2. 文档范围和控制... 4 2.1 目的/范围... 4 2.2 文档冲突... 4 2.3 文档授权... 4 2.4 文档更改控制... 4 3. 功能概述... 5 4. 系统架构... 6 5. 主要安全目标... 7 5.1 …...

小模型学习(1)-人脸识别

【写作背景】因为最近一直在研究大模型&#xff0c;在与客户进行交流时&#xff0c;如果要将大模型的变革性能力讲清楚&#xff0c;就一定要能将AI小模型的一些原理和效果讲清楚&#xff0c;进而形成对比。当然这不是一件简单的事情&#xff0c;一方面大模型分析问题的的本质原…...

sublime Text使用

1、增加install 命令面板 工具(tool)->控制面板(command palette) -> 输入install ->安装第一个install package controller&#xff0c;以下安装过了&#xff0c;所以没展示 2、安装json格式化工具 点击install package&#xff0c;等几秒会进入控制面板&#xff0…...

基于深度学习的yolov7植物病虫害识别及防治系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介YOLOv7 系统特性工作流程 二、功能三、系统四. 总结 一项目简介 # YOLOv7植物病虫害识别及防治系统介绍 简介 该系统基于深度学习技术&#xff0c;采…...

Leetcode 2963. Count the Number of Good Partitions

Leetcode 2963. Count the Number of Good Partitions 1. 解题思路2. 代码实现 题目链接&#xff1a;2963. Count the Number of Good Partitions 1. 解题思路 这一题根据题意&#xff0c;显然我们可以将其先分为 n n n个原子partition&#xff0c;确保任意两个partition之间…...

C语言动态内存经典笔试题分析

C语言动态内存经典笔试题分析 文章目录 C语言动态内存经典笔试题分析1. 题目一2. 题目二3. 题目三4. 题目四 1. 题目一 void GetMemory(char *p){p (char *)malloc(100);} void Test(void){char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str)…...

截断正态分布stats.truncnorm()X.rvs(10000)

就是在均值和方差之外&#xff0c;再指定正态分布随机数群的上下限&#xff0c;如 [ μ − 3 σ , μ 3 σ ] [\mu-3\sigma,\mu3\sigma] [μ−3σ,μ3σ] stats.truncnorm&#xff08;&#xff09;参数 X stats.truncnorm(-2, 2, locmu, scalesigma) -2 2是截断的正态分布…...

第59天:django学习(八)

事务 事务是MySQL数据库中得一个重要概念,事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全。 开启事务的三个关键字 start transaction commit rollback 开启事务 from django.db import transaction…...

举例说明自然语言处理(NLP)技术。

本文章由AI生成&#xff01; 以下是自然语言处理&#xff08;NLP&#xff09;技术的一些例子&#xff1a; 机器翻译&#xff1a;将一种语言翻译成另一种语言的自动化过程。常见的机器翻译系统包括谷歌翻译&#xff0c;百度翻译等。 语音识别&#xff1a;将口头语言转换成文本…...

echarts地图marker自定义图标并添加点击事件

symbol如果引用https图片链接会报403&#xff0c;直接引用本地 series: [{type: scatter, // 使用散点图系列 coordinateSystem: geo, // 设置坐标系为地理坐标系 zlevel: 100,data: [{name: 上海,value: [121.48, 31.22], // 上海的经纬度坐标 symbol: image:// require(/…...

C盘瘦身,C盘清理

以下只是我的C盘清理经验~ 一.【用软件简单清理C盘】 使用一些垃圾清理软件&#xff0c;简单的初步把C盘先清理一遍。&#xff08;这种软件太多我就不推荐了……&#xff09; 二.【WPS清理大师】 因为我电脑装了WPS&#xff0c;发现右键单击C盘有个选项【释放C盘空间】&#xf…...

STM32F103

提示&#xff1a;来源正点原子&#xff0c;参考STM32F103 战舰开发指南V1.3PDF资料 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 开发环境硬件普中科技&#xff0c;接…...

Unity使用打成图集的Sprite作为模型贴图使用的问题

大家好&#xff0c;我是阿赵。   有时候用Unity引擎做项目的时候&#xff0c;会遇到这样的需求&#xff0c;美术做了一些模型或者特效&#xff0c;然后策划想在游戏运行的时候&#xff0c;读取一些游戏图标放在特效或者模型上面当做贴图使用。   这个需求实现起来很简单&am…...

el-select赋值对象是对象时,出现赋值与展示不一致问题

代码逻辑类似&#xff1a;module 是个object { "appId": "", "id": 65, "name": "" } <el-form :model"form"><el-form-item label"申请模块" ><el-select v-model"…...

在 Node-RED 中引入 ECharts 实现数据可视化

Node-RED 提供了强大的可视化工具&#xff0c;而通过引入 ECharts 图表库&#xff0c;您可以更直观地呈现和分析数据。在这篇博客中&#xff0c;我们将介绍两种在 Node-RED 中实现数据可视化的方法&#xff1a;一种是引入本地 ECharts 库&#xff0c;另一种是直接使用 CDN&…...

docker资源限制

目录 系统压力测试工具stress 1. cpu资源限制 1.1 限制CPU Share 1.2 限制CPU 核数 1.3 CPU 绑定 2. mem资源限制 3. 限制IO 二、端口转发 三、容器卷 四、部署centos7容器应用 五、docker数据存储位置 六、docker网络 容器网络分类 在使用 docker 运行容器时&…...

探索HarmonyOS_开发软件安装

随着华为推出HarmonyOS NEXT 宣布将要全面启用鸿蒙原声应用&#xff0c;不在兼容安卓应用&#xff0c; 现在开始探索鸿蒙原生应用的开发。 HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 鸿蒙官网 开发软件肯定要从这里下载 第一个为微软系统(windows)&#xff0c;第…...

CSS中控制元素水平布局的七个属性

元素的水平方向的布局 元素在其父元素中水平方向的位置由一下几个属性共同决定 margin-left border-left padding-left width padding-right border-right margin-right 一个元素在其父元素中&#xff0c;水平布局必须要满足以下…...

第37天:SQL详解之DDL

Python学习100天(从入门到精通系列文章) 文章目录 Python学习100天(从入门到精通系列文章) 前言 一、SQL概述 1.1 建库建表 1.2 DDL关键注意事项 二、存储引擎对比 三、数据类型选择 四、删除表和修改表 4.1 删除表 4.2 修改表 总结 前言 在前一篇文章中,我们了解了关系型…...

曼德勃罗集的 Three.js 实现

效果预览 经典的曼德勃罗集&#xff08;Mandelbrot Set&#xff09;分形渲染&#xff0c;配合动态缩放动画探索分形边界的无限细节。使用线性插值平滑着色&#xff0c;呈现出彩虹般的色彩过渡。 &#x1f449; 点击查看《曼德勃罗集的》完整源码与效果演示 Shader 实现原理…...

LabVIEW状态机设计:从顺序流程到事件驱动的架构升级

1. 项目概述&#xff1a;从“顺序流程”到“状态驱动”的思维跃迁如果你用过LabVIEW&#xff0c;画过流程图&#xff0c;写过一些简单的数据采集或仪器控制程序&#xff0c;那你大概率经历过这样的场景&#xff1a;程序一开始跑得挺好&#xff0c;几个步骤按顺序执行&#xff0…...

对比直接使用厂商 API 观察通过 Taotoken 进行成本管理的便利性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商 API 观察通过 Taotoken 进行成本管理的便利性 对于需要同时调用多个大语言模型的个人开发者或小项目而言&#x…...

AspectCore-Framework高级特性:参数拦截、异步切面、作用域管理

AspectCore-Framework高级特性&#xff1a;参数拦截、异步切面、作用域管理 【免费下载链接】AspectCore-Framework AspectCore is an AOP-based cross platform framework for .NET Standard. 项目地址: https://gitcode.com/gh_mirrors/as/AspectCore-Framework Aspec…...

技术深度解析:OpenUtau多语言音素处理架构与实现原理

技术深度解析&#xff1a;OpenUtau多语言音素处理架构与实现原理 【免费下载链接】OpenUtau Open singing synthesis platform / Open source UTAU successor 项目地址: https://gitcode.com/gh_mirrors/op/OpenUtau OpenUtau作为开源歌声合成平台&#xff0c;其多语言支…...

从噪音烦恼到静音天堂:Fan Control帮你实现Windows风扇控制的终极自由

从噪音烦恼到静音天堂&#xff1a;Fan Control帮你实现Windows风扇控制的终极自由 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/Git…...

李力/张明亮/周雍进等合作Nat Com | 山梨酸的高效异源生物合成

近日&#xff0c;福建师范大学李力教授团队与中国科学院大连化学物理研究所周雍进合作在天然产物生物合成与合成生物学领域取得重要突破&#xff0c;相关研究成果以“Toward sustainable food preservatives: high-level production of sorbic acid in engineered Saccharomyce…...

微软逐步淘汰 SMS 身份验证,通行密钥带来更强安全保障!

ZDNET 要点总结微软正在逐步淘汰将 SMS 作为身份验证方式&#xff0c;因为 SMS 消息未加密&#xff0c;易受黑客攻击。微软账户所有者将被提示设置通行密钥。通常登录或找回在线账户时会收到 SMS 验证短信&#xff0c;但这并非安全的身份验证方式&#xff0c;如今微软对使用微软…...

魔兽争霸III终极优化指南:5大功能彻底解决现代系统兼容性问题

魔兽争霸III终极优化指南&#xff1a;5大功能彻底解决现代系统兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代电脑…...