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

场景描述

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

比如:

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

操作步骤

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

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

2) 放置loosejar.jar

3) agent启动跑程序

  1. D:\Insight\InsightWhys\target>java -javaagent:loosejar-1.0.1.jar -jar InsightWhys-1.0.jar Main_MultiTask
  2. [loosejar]: loosejar analysis is registered to run on JVM shutdown.
  3. [loosejar]: Registering loosejar as a JMX service...
  4. [loosejar]: Registered loosejar as a JMX service: [com.googlecode.loosejar:type=LooseJarMBean]
  5. Main_MultiTask Done......
  6. 消耗156301开始: 2017-07-07 11:34:59:248
  7. 对于token:1000000156301_token已经消耗过
  8. [loosejar]: Found 2014 classes loaded in the JVM.
  9. [loosejar]: Found 122 various ClassLoader(s) inside the JVM.
  10. [loosejar]: Summary for [sun.misc.Launcher$AppClassLoader] classloader:
  11. Jar: D:\Insight\InsightWhys\target\TcThriftClient-1.0-SNAPSHOT.jar
  12. Utilization: 2.51% - loaded 15 of 597 classes.
  13. Jar: D:\Insight\InsightWhys\target\lib\libthrift-0.5.0.jar
  14. Utilization: 22.94% - loaded 25 of 109 classes.
  15. Jar: D:\Insight\InsightWhys\target\lib\finagle-core_2.10-6.20.0.jar
  16. Utilization: 0.00% - loaded 0 of 1843 classes.
  17. Jar: D:\Insight\InsightWhys\target\lib\scala-library-2.10.4.jar
  18. Utilization: 0.00% - loaded 0 of 4899 classes.
  19. Jar: D:\Insight\InsightWhys\target\lib\netty-3.9.1.1.Final.jar
  20. Utilization: 0.00% - loaded 0 of 833 classes.
  21. Jar: D:\Insight\InsightWhys\target\lib\util-app_2.10-6.19.0.jar
  22. Utilization: 0.00% - loaded 0 of 87 classes.
  23. Jar: D:\Insight\InsightWhys\target\lib\util-core_2.10-6.19.0.jar
  24. Utilization: 0.00% - loaded 0 of 911 classes.
  25. Jar: D:\Insight\InsightWhys\target\lib\util-collection_2.10-6.19.0.jar
  26. Utilization: 0.00% - loaded 0 of 34 classes.
  27. Jar: D:\Insight\InsightWhys\target\lib\jsr305-1.3.9.jar
  28. Utilization: 0.00% - loaded 0 of 35 classes.
  29. Jar: D:\Insight\InsightWhys\target\lib\commons-collections-3.2.1.jar
  30. Utilization: 0.00% - loaded 0 of 458 classes.
  31. Jar: D:\Insight\InsightWhys\target\lib\util-hashing_2.10-6.19.0.jar
  32. Utilization: 0.00% - loaded 0 of 40 classes.
  33. Jar: D:\Insight\InsightWhys\target\lib\util-jvm_2.10-6.19.0.jar
  34. Utilization: 0.00% - loaded 0 of 130 classes.
  35. Jar: D:\Insight\InsightWhys\target\lib\util-logging_2.10-6.19.0.jar
  36. Utilization: 0.00% - loaded 0 of 141 classes.
  37. Jar: D:\Insight\InsightWhys\target\lib\scalatest_2.10-2.1.3.jar
  38. Utilization: 0.00% - loaded 0 of 3929 classes.
  39. Jar: D:\Insight\InsightWhys\target\lib\scala-reflect-2.10.3.jar
  40. Utilization: 0.00% - loaded 0 of 2036 classes.
  41. Jar: D:\Insight\InsightWhys\target\lib\finagle-thrift_2.10-6.20.0.jar
  42. Utilization: 0.00% - loaded 0 of 209 classes.
  43. Jar: D:\Insight\InsightWhys\target\lib\finagle-serversets_2.10-6.20.0.jar
  44. Utilization: 0.00% - loaded 0 of 464 classes.
  45. Jar: D:\Insight\InsightWhys\target\lib\commons-lang-2.6.jar
  46. Utilization: 0.00% - loaded 0 of 133 classes.
  47. Jar: D:\Insight\InsightWhys\target\lib\commons-io-2.1.jar
  48. Utilization: 0.00% - loaded 0 of 104 classes.
  49. Jar: D:\Insight\InsightWhys\target\lib\slf4j-api-1.6.1.jar
  50. Utilization: 39.13% - loaded 9 of 23 classes.
  51. Jar: D:\Insight\InsightWhys\target\lib\slf4j-jdk14-1.6.1.jar
  52. Utilization: 60.00% - loaded 3 of 5 classes.
  53. Jar: D:\Insight\InsightWhys\target\lib\guice-3.0.jar
  54. Utilization: 0.00% - loaded 0 of 565 classes.
  55. Jar: D:\Insight\InsightWhys\target\lib\aopalliance-1.0.jar
  56. Utilization: 0.00% - loaded 0 of 9 classes.
  57. Jar: D:\Insight\InsightWhys\target\lib\gson-2.2.4.jar
  58. Utilization: 0.00% - loaded 0 of 153 classes.
  59. Jar: D:\Insight\InsightWhys\target\lib\zookeeper-3.3.4.jar
  60. Utilization: 0.00% - loaded 0 of 341 classes.
  61. Jar: D:\Insight\InsightWhys\target\lib\log4j-1.2.15.jar
  62. Utilization: 0.00% - loaded 0 of 259 classes.
  63. Jar: D:\Insight\InsightWhys\target\lib\finagle-test_2.10-6.20.0.jar
  64. Utilization: 0.00% - loaded 0 of 11 classes.
  65. Jar: D:\Insight\InsightWhys\target\lib\commons-codec-1.6.jar
  66. Utilization: 0.00% - loaded 0 of 76 classes.
  67. Jar: D:\Insight\InsightWhys\target\lib\util-zk-common_2.10-6.19.0.jar
  68. Utilization: 0.00% - loaded 0 of 27 classes.
  69. Jar: D:\Insight\InsightWhys\target\lib\util-zk_2.10-6.19.0.jar
  70. Utilization: 0.00% - loaded 0 of 217 classes.
  71. Jar: D:\Insight\InsightWhys\target\lib\guava-16.0.1.jar
  72. Utilization: 0.00% - loaded 0 of 1678 classes.
  73. Jar: D:\Insight\InsightWhys\target\lib\jackson-core-2.3.1.jar
  74. Utilization: 0.00% - loaded 0 of 87 classes.
  75. Jar: D:\Insight\InsightWhys\target\lib\jackson-databind-2.3.1.jar
  76. Utilization: 0.00% - loaded 0 of 565 classes.
  77. Jar: D:\Insight\InsightWhys\target\lib\jackson-annotations-2.3.0.jar
  78. Utilization: 0.00% - loaded 0 of 49 classes.
  79. Jar: D:\Insight\InsightWhys\target\lib\jackson-module-scala_2.10-2.3.1.jar
  80. Utilization: 0.00% - loaded 0 of 404 classes.
  81. Jar: D:\Insight\InsightWhys\target\lib\paranamer-2.6.jar
  82. Utilization: 0.00% - loaded 0 of 20 classes.

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





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

  1. aopalliance-1.0.jar
  2. commons-codec-1.6.jar
  3. commons-collections-3.2.1.jar
  4. commons-io-2.1.jar
  5. commons-lang-2.6.jar
  6. finagle-core_2.10-6.20.0.jar
  7. finagle-serversets_2.10-6.20.0.jar
  8. finagle-test_2.10-6.20.0.jar
  9. finagle-thrift_2.10-6.20.0.jar
  10. gson-2.2.4.jar
  11. guava-16.0.1.jar
  12. guice-3.0.jar
  13. jackson-annotations-2.3.0.jar
  14. jackson-core-2.3.1.jar
  15. jackson-databind-2.3.1.jar
  16. jackson-module-scala_2.10-2.3.1.jar
  17. jsr305-1.3.9.jar
  18. libthrift-0.5.0.jar
  19. log4j-1.2.15.jar
  20. netty-3.9.1.1.Final.jar
  21. paranamer-2.6.jar
  22. scala-library-2.10.4.jar
  23. scala-reflect-2.10.3.jar
  24. scalatest_2.10-2.1.3.jar
  25. slf4j-api-1.6.1.jar
  26. slf4j-jdk14-1.6.1.jar
  27. util-app_2.10-6.19.0.jar
  28. util-collection_2.10-6.19.0.jar
  29. util-core_2.10-6.19.0.jar
  30. util-hashing_2.10-6.19.0.jar
  31. util-jvm_2.10-6.19.0.jar
  32. util-logging_2.10-6.19.0.jar
  33. util-zk-common_2.10-6.19.0.jar
  34. util-zk_2.10-6.19.0.jar
  35. zookeeper-3.3.4.jar
  36. 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. wsl 子系统 用户目录位置

    C:\Users\DELL\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalS ...

  2. VMware Workstation安装Red hat7.0联网问题总结

    1.在red hat7当中iconfig命令是被取消了的,开发者用ip addr命令取代了ifconfig命令. 当然也是可以用ifconfig命令的 (前提是你安装的linux是可以联网的): 1) ...

  3. 下载Spring4.3.18.RELEASE的官方文档

    wget -p --page-requisites --convert-links -P /root/spring https://docs.spring.io/spring/docs/4.3.18. ...

  4. hyperopt自动调参

    hyperopt自动调参 在传统机器学习和深度学习领域经常需要调参,调参有些是通过通过对数据和算法的理解进行的,这当然是上上策,但还有相当一部分属于"黑盒" hyperopt可以帮 ...

  5. 使用IDEA时跳转到.class的解决办法

    项目背景:jdk1.8 软件环境:IDEA 问题: 1. 两个不同的项目,在A项目中写了一个实体类.B项目中引用.在B项目中CTRL+鼠标左键点击进入,正常情况下是进入了源码文件,也就是.JAVA文件 ...

  6. Redis安装、命令以及设置密码遇到的问题

    一.下载Redis 如果没有 安装wget先安装wget和gcc(使用make的时候会用上) wget http://download.redis.io/releases/redis-4.0.8.ta ...

  7. 菜鸡谈OO 第二单元总结

    “欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...

  8. 圆形进度条css3样式

    <view class="con"> <view class="percent-circle percent-circle-left"> ...

  9. Hadoop集群搭建-full完全分布式(三)

    环境:Hadoop-2.8.5 .centos7.jdk1.8 一.步骤 1).4台centos虚拟机 2). 将hadoop配置修改为完全分布式 3). 启动完全分布式集群 4). 在完全分布式集群 ...

  10. C# CreateParams的使用(解决闪屏问题)

    <转载自:https://blog.csdn.net/xpwang/article/details/53427479> 窗体和控件的属性CreateParams(这真的是一个属性)很神奇, ...