冗余jar包识别神器 - loose.jar

场景描述

项目迭代久了,会添加各类jar包,事实上很多jar包其实根本没用到。那如何快速识别冗余的jar,以方便从项目中清除掉呢?

比如:

该简单的测试工程lib里有63个jar包,如何扫描出真正使用到的jar包?

操作步骤

1) install后,命令行运行该程序,确保运行正常

D:\Insight\InsightWhys\target>java -jar InsightWhys-1.0.jar Main_MultiTask
2017-09-02 19:37:25:930
Main_MultiTask Done......
消耗177802开始: 2017-09-02 19:37:26:001
对于token:1000000156301_token已经消耗过

2) 放置loosejar.jar

3) agent启动跑程序

D:\Insight\InsightWhys\target>java -javaagent:loosejar-1.0.1.jar -jar InsightWhys-1.0.jar Main_MultiTask
[loosejar]: loosejar analysis is registered to run on JVM shutdown.
[loosejar]: Registering loosejar as a JMX service...
[loosejar]: Registered loosejar as a JMX service: [com.googlecode.loosejar:type=LooseJarMBean]
Main_MultiTask Done......
消耗156301开始: 2017-07-07 11:34:59:248
对于token:1000000156301_token已经消耗过
[loosejar]: Found 2014 classes loaded in the JVM.
[loosejar]: Found 122 various ClassLoader(s) inside the JVM.
[loosejar]: Summary for [sun.misc.Launcher$AppClassLoader] classloader:
Jar: D:\Insight\InsightWhys\target\TcThriftClient-1.0-SNAPSHOT.jar
Utilization: 2.51% - loaded 15 of 597 classes.
Jar: D:\Insight\InsightWhys\target\lib\libthrift-0.5.0.jar
Utilization: 22.94% - loaded 25 of 109 classes.
Jar: D:\Insight\InsightWhys\target\lib\finagle-core_2.10-6.20.0.jar
Utilization: 0.00% - loaded 0 of 1843 classes.
Jar: D:\Insight\InsightWhys\target\lib\scala-library-2.10.4.jar
Utilization: 0.00% - loaded 0 of 4899 classes.
Jar: D:\Insight\InsightWhys\target\lib\netty-3.9.1.1.Final.jar
Utilization: 0.00% - loaded 0 of 833 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-app_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 87 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-core_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 911 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-collection_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 34 classes.
Jar: D:\Insight\InsightWhys\target\lib\jsr305-1.3.9.jar
Utilization: 0.00% - loaded 0 of 35 classes.
Jar: D:\Insight\InsightWhys\target\lib\commons-collections-3.2.1.jar
Utilization: 0.00% - loaded 0 of 458 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-hashing_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 40 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-jvm_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 130 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-logging_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 141 classes.
Jar: D:\Insight\InsightWhys\target\lib\scalatest_2.10-2.1.3.jar
Utilization: 0.00% - loaded 0 of 3929 classes.
Jar: D:\Insight\InsightWhys\target\lib\scala-reflect-2.10.3.jar
Utilization: 0.00% - loaded 0 of 2036 classes.
Jar: D:\Insight\InsightWhys\target\lib\finagle-thrift_2.10-6.20.0.jar
Utilization: 0.00% - loaded 0 of 209 classes.
Jar: D:\Insight\InsightWhys\target\lib\finagle-serversets_2.10-6.20.0.jar
Utilization: 0.00% - loaded 0 of 464 classes.
Jar: D:\Insight\InsightWhys\target\lib\commons-lang-2.6.jar
Utilization: 0.00% - loaded 0 of 133 classes.
Jar: D:\Insight\InsightWhys\target\lib\commons-io-2.1.jar
Utilization: 0.00% - loaded 0 of 104 classes.
Jar: D:\Insight\InsightWhys\target\lib\slf4j-api-1.6.1.jar
Utilization: 39.13% - loaded 9 of 23 classes.
Jar: D:\Insight\InsightWhys\target\lib\slf4j-jdk14-1.6.1.jar
Utilization: 60.00% - loaded 3 of 5 classes.
Jar: D:\Insight\InsightWhys\target\lib\guice-3.0.jar
Utilization: 0.00% - loaded 0 of 565 classes.
Jar: D:\Insight\InsightWhys\target\lib\aopalliance-1.0.jar
Utilization: 0.00% - loaded 0 of 9 classes.
Jar: D:\Insight\InsightWhys\target\lib\gson-2.2.4.jar
Utilization: 0.00% - loaded 0 of 153 classes.
Jar: D:\Insight\InsightWhys\target\lib\zookeeper-3.3.4.jar
Utilization: 0.00% - loaded 0 of 341 classes.
Jar: D:\Insight\InsightWhys\target\lib\log4j-1.2.15.jar
Utilization: 0.00% - loaded 0 of 259 classes.
Jar: D:\Insight\InsightWhys\target\lib\finagle-test_2.10-6.20.0.jar
Utilization: 0.00% - loaded 0 of 11 classes.
Jar: D:\Insight\InsightWhys\target\lib\commons-codec-1.6.jar
Utilization: 0.00% - loaded 0 of 76 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-zk-common_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 27 classes.
Jar: D:\Insight\InsightWhys\target\lib\util-zk_2.10-6.19.0.jar
Utilization: 0.00% - loaded 0 of 217 classes.
Jar: D:\Insight\InsightWhys\target\lib\guava-16.0.1.jar
Utilization: 0.00% - loaded 0 of 1678 classes.
Jar: D:\Insight\InsightWhys\target\lib\jackson-core-2.3.1.jar
Utilization: 0.00% - loaded 0 of 87 classes.
Jar: D:\Insight\InsightWhys\target\lib\jackson-databind-2.3.1.jar
Utilization: 0.00% - loaded 0 of 565 classes.
Jar: D:\Insight\InsightWhys\target\lib\jackson-annotations-2.3.0.jar
Utilization: 0.00% - loaded 0 of 49 classes.
Jar: D:\Insight\InsightWhys\target\lib\jackson-module-scala_2.10-2.3.1.jar
Utilization: 0.00% - loaded 0 of 404 classes.
Jar: D:\Insight\InsightWhys\target\lib\paranamer-2.6.jar
Utilization: 0.00% - loaded 0 of 20 classes.

4) 用jconsole查看使用到的jar(该步骤可以省略,日志已在第3步打印了)





5) 统计出实际使用到36个jar

aopalliance-1.0.jar
commons-codec-1.6.jar
commons-collections-3.2.1.jar
commons-io-2.1.jar
commons-lang-2.6.jar
finagle-core_2.10-6.20.0.jar
finagle-serversets_2.10-6.20.0.jar
finagle-test_2.10-6.20.0.jar
finagle-thrift_2.10-6.20.0.jar
gson-2.2.4.jar
guava-16.0.1.jar
guice-3.0.jar
jackson-annotations-2.3.0.jar
jackson-core-2.3.1.jar
jackson-databind-2.3.1.jar
jackson-module-scala_2.10-2.3.1.jar
jsr305-1.3.9.jar
libthrift-0.5.0.jar
log4j-1.2.15.jar
netty-3.9.1.1.Final.jar
paranamer-2.6.jar
scala-library-2.10.4.jar
scala-reflect-2.10.3.jar
scalatest_2.10-2.1.3.jar
slf4j-api-1.6.1.jar
slf4j-jdk14-1.6.1.jar
util-app_2.10-6.19.0.jar
util-collection_2.10-6.19.0.jar
util-core_2.10-6.19.0.jar
util-hashing_2.10-6.19.0.jar
util-jvm_2.10-6.19.0.jar
util-logging_2.10-6.19.0.jar
util-zk-common_2.10-6.19.0.jar
util-zk_2.10-6.19.0.jar
zookeeper-3.3.4.jar
InsightWhys-1.0.jar

6) 回归验证,任意删除lib里这36个jar之外的jar,跑程序,正常

总结

该方法可以快速知道程序实际依赖的jar,虽然其他jar在不同case下可能会依赖,但可以有目的去人工校验或case覆盖,结合IDEA show dependencies来用更佳![]

冗余jar包识别神器 - loose.jar的更多相关文章

  1. Eclipse用Runnable JAR file方式打jar包,并用该jar包进行二次开发

    目录: 1.eclipse创建Java项目(带jar包的) 2. eclipse用Export的Runnable JAR file方式打jar包(带jar包的) 打jar包 1)class2json1 ...

  2. 多个jar包合并成一个jar包的办法

    步骤: 1.将多个JAR包使用压缩软件打开,并将全包名的类拷贝到一个临时目录地下. 2.cmd命令到该临时目录下,此时会有很多.class文件,其中需要带完整包路径 3.执行 jar -cvfM te ...

  3. 有引用外部jar包时(J2SE)生成jar文件

    一.工程没有引用外部jar包时(J2SE) 选中工程---->右键,Export...--->Java--->选择JAR file--->next-->选择jar fil ...

  4. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

  5. Ant打包可运行的Jar包(加入第三方jar包)

    本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.al ...

  6. 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包

    http://blog.csdn.net/u013177446/article/details/54134394 ******************************************* ...

  7. 配置Jar包及相关依赖Jar包的本地存放路径

    配置Jar包及相关依赖Jar包的本地存放路径 用 maven2 ,pom.xml中设置了依赖,会帮你下载所有依赖的.jar到 M2_REPO 指向的目录. M2_REPO是一个用来定义 maven 2 ...

  8. idea升级maven工程jar包版本和解决jar包冲突

    原来用过eclipse的都知道,想要升级maven工程的jar包版本或者解决jar包冲突,直接在pom文件下的dependency hierarchy视图下右击冲突的jar包,将其exclude掉,然 ...

  9. 多个jar包合并成一个jar包(ant)

    https://blog.csdn.net/gzl003csdn/article/details/53539133 多个jar包合并成一个jar 使用Apache的Ant是一个基于Java的生成工具. ...

随机推荐

  1. java自动化-数据驱动junit演示,下篇

    本文旨在帮助读者介绍,如何使用excle实现数据驱动 本文是上文https://www.cnblogs.com/xuezhezlr/p/9096063.html的继续,如果没看上文建议自己看一下,对理 ...

  2. 使用Ant Design的select组件时placeholder不生效/不起作用的解决办法

    先来说说使用Ant Design和Element-ui的感觉吧. 公司的项目开发中用的是vue+element-ui,使用了一通下来后,觉得element-ui虽然也有一些问题或坑,但这些小问题或坑凭 ...

  3. ckeditor+ckfinder

    官方地址:http://ckeditor.com/ 复制ckeditor和ckfinder的文件夹到项目根路径下 拷贝ckfinder的config.xml到WEB-INF下 <config&g ...

  4. 【转载】.NET压缩/解压文件/夹组件

    转自:http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html 阅读目录 1.前言 2.关于压缩格式和算法的基础 3.几种常见的.N ...

  5. hibernate框架搭建

    hibernate框架的搭建步骤: 1.导包 2.创建数据库准备表 3.书写orm元数据(对象与表的映射配置文件) 4.书写配置文件 5.书写代码测试 一.导包: 创建web-maven工程添加hib ...

  6. 最小生成树 kruskal算法&prim算法

    (先更新到这,后面有时间再补,嘤嘤嘤) 今天给大家简单的讲一下最小生成树的问题吧!(ps:本人目前还比较菜,所以最小生成树最后的结果只能输出最小的权值,不能打印最小生成树的路径) 本Tianc在刚学的 ...

  7. MySQL 5.7 忘记密码

    MySQL 5.7 忘记Root密码 用管理员身份运行cmd.然后使用命令进行: 1.打开MySQL>bin文件夹 >cd C:\mysql\mysql5.7.14\bin 2.停止mys ...

  8. C# 开源组件--NPOI读取Excel单元格中的公式值

    今天在项目中碰到了EXCEL导入的数据是用公式生成,直接导入不了数据,写在博客中方便自已查询也可以给想找这方面的参考一下: 用NPOI导入时,在OFFICE 2007中的文件导入时一般会用XSSF,所 ...

  9. Javascript高级编程学习笔记(84)—— Canvas(1)基本用法

    Canvas绘图 Canvas自HTML5引入后,由于其炫酷的效果成为HTML5新增功能中最受欢迎的部分 Canvas元素通过在页面中设定一个区域,然后就可以使用JS在其中绘制图形 <canva ...

  10. CS20SI-tensorflow for research笔记: Lecture3

    本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. Tens ...