读取jar中MF文件以及pom.xml中的版本号
前段时间,接到了,让读取项目的版本号,如果仅仅是开发环境的话,可以直接读取pom文件,但是如果是jar或者是war时,可能就不到jar里面的pom.xml,所以最后查看jar中有MANIFEST.MF有版本号,同时采用这个方法(两种方式全部使用)。因为项目关系就不进行截图了。
第一种:读取pom.xml的版本号(仅仅适合开发环境使用):
引入依赖
<dependency><groupId>org.apache.maven</groupId><artifactId>maven-model</artifactId><version>3.6.0</version>
</dependency>
第二种:读取jar中/BOOT-INF/classes/META-INF/MANIFEST.MF
代码如下:
public void test(){String versionStr="";//得到路径(开发环境没有.jar;jar包中存在.jar)String pathStr =this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();pathStr = decodeStr(pathStr);//编码为utf-8if(pathStr.indexOf(".jar") == -1){//此为开发环境versionStr = getPomVersion();}else{//jar包versionStr=getJarVersion(pathStr);}
}
private String getPomVersion(){String versionStr = "";//项目路径String pathStr = System.getProperty("user.dir");MavenXpp3Reader mx3Reader = new MavenXpp3Reader();String pomPath = pathStr + File.separator+"pom.xml";pomPath = decodeStr(pomPath);//编码为utf-8try{Model model = mx3Reader.read(new FileReader(pomPath));versionStr = model.getVersion();}catch(Exception e){e.printStackTrace();}return versionStr;
}
private String getJarVersion(String pathStr){String versionStr = "";JarFile jarFile = null; try{pathStr = pathStr.replace("!//BOOT-INF/classes!/","");pathStr = decodeStr(pathStr);if(pathStr.startWith("file:")){pathStr = pathStr.substring(5);}jarFile = new JarFile();JarEntry jarEntry = jarFile.getJarEntry("META-INF/MANIFEST.MF");if(jarEntry != null){StringWriter sw = new StringWriter();FileCopyUtils.copy(new InputStreamReader(jarFile.getInputStream(jarEntry)),sw);String text = IOUtils.toString(new StringReader(sw.toString()));String[] splitStrs = text.split("\r\n");for(String splitStr:splitStrs){if(splitStr.contiains("Implementation-Version")){versionStr=splitStr.substring(splitStr.indexOf(":")+1).trim();}}}}catch(IOException e){e.printStackTrace();}finally{try{jarFile.close();}catch(IOException e){e.printStackTrace();}}return versionStr;
}
public String decodeStr(String text){try{text = java.net.URLDecoder.decode(text,"UTF-8");}catch(UnsupportedEncodingException){e.printStackTrace();}return text;
}
测试jar在Windows或者liunx运行就可以得到。
读取jar中MF文件以及pom.xml中的版本号相关推荐
- eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包
1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...
- (转)如何在maven的pom.xml中添加本地jar包
转载自: https://www.cnblogs.com/lixuwu/p/5855031.html 1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下 ...
- pom.xml中出现错误提示Failure to transfer org.jboss.weld.jar ... maven2 was cached in the local repository.
pom.xml中出现 以下错误提示: Failure to transfer org.jboss.weld:weld-core:jar:1.0.1-SP3 from https://repo.mave ...
- pom env.java home_关于java:aven:POM.xml中缺少工件com.sun:tools:jar:1.6.0编译时异常...
本问题已经有最佳答案,请猛点这里访问. 当我尝试增加对工具的依赖时,我遇到了一个奇怪的问题,并且在pom.xml中遇到了编译时异常. jar显示如下(缺少工件com.sun:tools:jar:1.6 ...
- pom.xml中pom全称_摆脱pom XML…几乎
pom.xml中pom全称 介绍 POM文件是XML格式的文件,声明性地描述了要使用Maven构建的Java项目的构建结构. 维护大型Java项目的POM XML文件通常很麻烦. XML是冗长的,PO ...
- maven项目pom.xml中parent标签的使用
本文来说下maven项目pom.xml中parent标签的使用 文章目录 parent标签 parent标签由来 依赖排除 本文小结 parent标签 parent标签使用例子 <!--父项目的 ...
- Maven pom.xml中的元素modules、parent、properties以及import
前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它 ...
- springboot创建parent_创建springboot项目时,pom.xml中parent报错
下载Maven 进入maven官网 http://maven.apache.org/download.cgi. 找到并点击apache-maven-3.6.2-bin.zipi.下载压缩包 配置Mav ...
- maven的pom.xml中profiles的作用
1.profiles是什么?有什么作用 在maven构建的项目都存在一个pom.xml的项目对象模型配置文件,用于约束项目(如:jar包管理.构建管理等).profiles是pom.xml中的一个配置 ...
最新文章
- 没有在工厂1112中维护 MRP 参数
- Mybatis传入多参问题
- Java实现根据地理位置获取经纬度
- SAP IBASE Category 01和03的区别
- Python自然语言处理学习笔记(19):3.3 使用Unicode进行文字处理
- 域用户权限|安装软件
- HDU 2594 Simpsons’ Hidden Talents (字符串-KMP)
- Chrome用户不喜新版:宁用其他浏览器也不要用旧版本
- 知了堂学习笔记-CSS样式整理(一)
- Linux交叉编译+粤嵌LCD实现三色图
- android app邀请码,还在用邀请码邀请注册吗?落后咯!!!我家APP自带邀请码的
- Enterprise Architect:绘制基本包图(详细步骤)
- 如何安装vue并创建vue.js框架项目
- arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较
- PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)
- 以太网 DHCP(简介、DHCP工作原理、租期时间)
- 题解洛谷P1497(c++解法)木牛流马
- 2021年焊工(初级)新版试题及焊工(初级)在线考试
- 浅谈一个完整网站配色方案设计大法3实战篇
- 修改Transmission登陆密码
热门文章
- 青龙新毛——闪电世界
- 【CSS应用篇】——CSS如何实现圆角边框
- ubuntu 内核降级,切换linux内核版本
- asr语音识别,js页面demo,websocket实时语音
- 基于stm32f407cube ai实例
- scratch2.0制作母亲节礼物——电子烟花送给母亲
- magento2.3.2 用户支付成功后台没有生成订单 丢单问题处理
- QT--自定义代理(MVD)
- Qt MVD框架下修改视图中数据项/标题的背景颜色说明(Qt 5.10.1)
- 【EndNote】功能强大的文献管理软件