前段时间,接到了,让读取项目的版本号,如果仅仅是开发环境的话,可以直接读取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中的版本号相关推荐

  1. eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包

    1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...

  2. (转)如何在maven的pom.xml中添加本地jar包

    转载自: https://www.cnblogs.com/lixuwu/p/5855031.html 1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下 ...

  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 ...

  4. pom env.java home_关于java:aven:POM.xml中缺少工件com.sun:tools:jar:1.6.0编译时异常...

    本问题已经有最佳答案,请猛点这里访问. 当我尝试增加对工具的依赖时,我遇到了一个奇怪的问题,并且在pom.xml中遇到了编译时异常. jar显示如下(缺少工件com.sun:tools:jar:1.6 ...

  5. pom.xml中pom全称_摆脱pom XML…几乎

    pom.xml中pom全称 介绍 POM文件是XML格式的文件,声明性地描述了要使用Maven构建的Java项目的构建结构. 维护大型Java项目的POM XML文件通常很麻烦. XML是冗长的,PO ...

  6. maven项目pom.xml中parent标签的使用

    本文来说下maven项目pom.xml中parent标签的使用 文章目录 parent标签 parent标签由来 依赖排除 本文小结 parent标签 parent标签使用例子 <!--父项目的 ...

  7. Maven pom.xml中的元素modules、parent、properties以及import

    前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它 ...

  8. springboot创建parent_创建springboot项目时,pom.xml中parent报错

    下载Maven 进入maven官网 http://maven.apache.org/download.cgi. 找到并点击apache-maven-3.6.2-bin.zipi.下载压缩包 配置Mav ...

  9. maven的pom.xml中profiles的作用

    1.profiles是什么?有什么作用 在maven构建的项目都存在一个pom.xml的项目对象模型配置文件,用于约束项目(如:jar包管理.构建管理等).profiles是pom.xml中的一个配置 ...

最新文章

  1. 没有在工厂1112中维护 MRP 参数
  2. Mybatis传入多参问题
  3. Java实现根据地理位置获取经纬度
  4. SAP IBASE Category 01和03的区别
  5. Python自然语言处理学习笔记(19):3.3 使用Unicode进行文字处理
  6. 域用户权限|安装软件
  7. HDU 2594 Simpsons’ Hidden Talents (字符串-KMP)
  8. Chrome用户不喜新版:宁用其他浏览器也不要用旧版本
  9. 知了堂学习笔记-CSS样式整理(一)
  10. Linux交叉编译+粤嵌LCD实现三色图
  11. android app邀请码,还在用邀请码邀请注册吗?落后咯!!!我家APP自带邀请码的
  12. Enterprise Architect:绘制基本包图(详细步骤)
  13. 如何安装vue并创建vue.js框架项目
  14. arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较
  15. PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)
  16. 以太网 DHCP(简介、DHCP工作原理、租期时间)
  17. 题解洛谷P1497(c++解法)木牛流马
  18. 2021年焊工(初级)新版试题及焊工(初级)在线考试
  19. 浅谈一个完整网站配色方案设计大法3实战篇
  20. 修改Transmission登陆密码

热门文章

  1. 青龙新毛——闪电世界
  2. 【CSS应用篇】——CSS如何实现圆角边框
  3. ubuntu 内核降级,切换linux内核版本
  4. asr语音识别,js页面demo,websocket实时语音
  5. 基于stm32f407cube ai实例
  6. scratch2.0制作母亲节礼物——电子烟花送给母亲
  7. magento2.3.2 用户支付成功后台没有生成订单 丢单问题处理
  8. QT--自定义代理(MVD)
  9. Qt MVD框架下修改视图中数据项/标题的背景颜色说明(Qt 5.10.1)
  10. 【EndNote】功能强大的文献管理软件