如何查看jar包的版本信息

本文最后更新于2015年12月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

需要知道一种通用的方法以获取jar包的版本信息,因此有了此文。

搜索关键字:
how to check spring version
JAR 文件 规范
获取jar包版本信息
参考解答:

JAR文件本质上是一个zip文件,包含一个可选的META-INF目录。多数情况下,JAR文件并不是类文件和/或资源文件的简单聚合档案。他们经常用作应用程序和扩展的构建基础。如果存在的话,META-INF目录用来存储包和扩展的配置数据,包括安全、版本、扩展和服务。

将jar包解压后读取文件:
./META-INF/MANIFEST.MF
即可找到对应的版本信息。

==

==

针对Maven管理的Jar包
在 pom.properties 中包含了jar包的版本号信息

==

针对ANT管理的Jar包
在 build.xml 里建立一个存放版本号的属性,并在打Jar包时,将版本号压入MANIFEST文件。程序在执行的时候,读取Jar包的MANIFEST来获取版本号。

====

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2573.html

《如何查看jar包的版本信息》上有20条评论

  1. 在部分情况下,通过pom.xml无法找到「间接」依赖的jar包信息;
    但是我们可以通过Maven把运行时依赖到的内容也统计出来,更准确地讲,是把pom.xml中scope为compile和runtime级别的依赖都进行统计,这里可以使用 mvn dependency:tree -Dverbose 查看所有的依赖,简单的 mvn dependency:tree 可能显示不全。

  2. 【漏洞预警】Fastjson 远程代码执行漏洞(暂无PoC)
    http://bobao.360.cn/learning/detail/3617.html
    https://bbs.aliyun.com/read/309931.html
    https://github.com/alibaba/fastjson/wiki/security_update_20170315

    检测当前使用版本的是否有问题

    方法一:通过maven dependency检测 如果是maven工程,在代码根目录下执行如下命令,如果有返回,就是需要升级
    mvn dependency:tree | grep "com.alibaba.fastjson:" | grep -v sec01 | grep -v 1.2.25 | grep -v 1.2.26 | grep -v 1.2.27

    方法二:在lib目录下执行如下脚本命令,可以判断版本是否有问题
    ls | grep fastjson | grep jar | grep -v sec01 | grep -v 1.2.25 | grep -v 1.2.26 | grep -v 1.2.27 | grep -v 1.2.28 | grep -v 1.2.29

    方法三:看打开的文件中是否包含fastjson
    sudo -u tomcat lsof -X | grep -v 1.2.25 | grep -v 1.2.26 | grep -v 1.2.27 | grep -v 1.2.28 | grep -v 1.2.29

    通过lsof检测,在tomcat某些场景是检测不出来的,最好在lib目录下用ls检测(第2种方法)。

  3. 依赖检查(OWASP dependency-check is a software composition analysis utility that detects publicly disclosed vulnerabilities in application dependencies.)
    https://github.com/jeremylong/DependencyCheck
    https://www.owasp.org/index.php/OWASP_Dependency_Check

    【知识库】Dependency-check依赖检查工具
    https://mp.weixin.qq.com/s/j37Y1rpQphFFSoAtbzSnMQ

    GitHub引入依赖图和安全预警
    http://www.infoq.com/cn/news/2017/10/github-dependency-graph-security

  4. Mac上用 homebrew 安装的Maven执行报错:
    错误: 找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher

    https://tieba.baidu.com/p/3142104595
    http://blog.51cto.com/houenxun/1761956
    http://www.clarkchen.com/mac-%E9%85%8D%E7%BD%AE-maven%E7%9A%84%E4%B8%80%E4%B8%AA%E9%97%AE%E9%A2%98/

    网上的一些解决办法:
    配置PATH时将 $M2_HOME/bin 放在系统 $PATH 前就可以了。
    export M2_HOME=/opt/maven
    export PATH=$M2_HOME/bin:$PATH

    我的实际解决办法,只要在命令前面添加 sudo 即可,例如:
    sudo mvn -version

  5. spring-messaging Remote Code Execution 分析-【CVE-2018-1270】
    https://xz.aliyun.com/t/2252
    https://pivotal.io/security/cve-2018-1270

    CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警
    https://mp.weixin.qq.com/s/zW53wlWm5Bk1ZJV8i3b6QQ

    影响版本
    Spring Framework 5.0 to 5.0.4.
    Spring Framework 4.3 to 4.3.14
    已不支持的旧版本仍然受影响

    修复版本
    5.0.x 用户升级到5.0.5版本
    4.3.x 用户升级到4.3.15版本

    对应jar包名称
    spring-messaging-4.2.1.RELEASE.jar

  6. Maven生成可以直接运行的jar包的多种方式
    https://paper.tuisec.win/detail/5b730de2f09c1d0
    https://blog.csdn.net/xiao__gui/article/details/47341385

    Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。

    要想jar包能直接通过java -jar xxx.jar运行,需要满足:
    1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;
    2、要能加载到依赖包。

    使用Maven有以下几种方法可以生成能直接运行的jar包,可以根据需要选择一种合适的方法。
    方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包
    方法二:使用maven-assembly-plugin插件打包
    方法三:使用maven-shade-plugin插件打包

  7. Can’t execute jar- file: “no main manifest attribute”
    直接通过java命令执行jar包报错的解决方法
    https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute

    1、如果不希望额外指定参数,那就需要jar包本身是一个「可执行的jar包」
    这点可以通过在Maven项目的 pom.xml 中指定 mainClass 实现生成可执行jar包的功能;

    2、虽然jar包本身不是可执行的,但是其中的某个 Class 里有main方法可以执行,可以通过下面的命令选项实现该方法的调用
    java -cp app.jar com.somepackage.SomeClass

  8. 如何快速找到POC/EXP依赖的jar?
    http://gv7.me/articles/2019/quickly-find-jars-that-depend-on-poc-exp/
    http://www.liuhaihua.cn/archives/575573.html

    标题主要是针对安全人员,如果针对是开发人员的话,应该是 如何快速从众多jar中找到目标类?

    在编写Java相关中间件或者CMS的POC/EXP时一般都会依赖它们的某个jar,但它们的jar往往非常多,并且会分散在各个目录下,那么如何快速找到它们呢?

    可以通过编程实现一个小工具,以快速从众多jar中,搜索目标class所在的jar。不区分大小写,支持通配符搜索。

  9. Log4j2报错ERROR StatusLogger Unrecognized format specifier
    https://www.cnblogs.com/yeyang/p/10485790.html

    ERROR StatusLogger Unrecognized format specifier [d]
    ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.

    https://stackoverflow.com/questions/34945438/log4j2-configuration-not-found-when-running-standalone-application-built-by-shad
    https://stackoverflow.com/questions/27361052/failing-to-load-log4j2-while-running-fatjar

  10. 一行命令同时修改maven项目中多个mudule的版本号
    https://mp.weixin.qq.com/s/RdIStsQbn3WGTGZ2DHQBDg

    maven之所以强大,是因为他有一个牛X的插件机制。我们可以借助一个插件来实现这个功能。

    这个插件就是versions-maven-plugin。使用方法也很简单,就是在最外层的pom文件中的plugins块中,增加一下对应的插件配置。

发表评论

电子邮件地址不会被公开。 必填项已用*标注