请问如何找出java工程中多余的jar包?

programtic 发布于 2011/09/27 22:36
阅读 9K+
收藏 3

请问如何找出java工程中多余的jar包? 

现在工程中有很多多余的jar文件根本就没用到,请问有没有什么好的办法知道哪些jar是不需要的?

我知道的笨办法是:一个个的remove,如果编译不报错的话,应该就是不需要的,但是感觉这样

太笨了,希望能找到更好的办法,因为jar有好几百个,谢谢。

 

加载中
1
Wyatt
Wyatt

使用 Maven 来管理吧:
1. Maven 对于重复引用自动处理
2. Maven 可以处理传递依赖
3. Maven 可以强制控制依赖版本(dependencyManagement)

比如, 如果可以, 利用 pom 来首先管理上你的项目, 然后做第一次 jar 的清理工作, 将那些个有名的项目的 jar 按照 maven 坐标添加到依赖中, 然后再不断编译添加依赖这样循环操作, 直到完全编译通过.
期间借助你熟悉的 IDE 或者工具来完成.

但是利用 Maven 处理依赖的时候会有这样一个问题, 有的 jar 在早期的时候 Maven 坐标书写的不规范, 比如 groupId: statx, artifactId: statx-api 其实与 groupId: javax.xml.stream, artifactId: statxp-api 是一样的, 这个需要在依赖 groupId: statx 的依赖处使用 exclusions 来排除这样的依赖.

0
鉴客
鉴客

我也是这么干的,不过没你那么狠,搞了几百个jar包进去。

现在每加一个jar包都要确定是不是必须的!

ExtremeTalk
ExtremeTalk
编译通过并非能够说明这个jar是不需要的,因为可能存在依赖的依赖。
szf
szf
非常同意! 连jar依赖关系都理不清楚的人,枉称“程序员”啊~~
0
programtic
programtic
,不是我干的啊,我今天看了下,工程里面有299个jar,吓我一跳,大部分都没有用到。
0
ddatsh
ddatsh

有个叫greenjvm的小工具,可以提取需要的精确到每个类,生成绿色运行时,包括java.exe,jvm.dll之类

0
mallon
mallon
动态加载的怎么办
ddatsh
ddatsh
嗯,这貌似是个问题 我想到重写classloader,加载的时候,把类写出去
0
firstrose
firstrose

有一个办法

先编程把所有的文件访问一遍

一天以后运行程序,每个功能都用用

再回头看最后访问时间,有更新的就是有用的

0
Z
ZYud

引用来自“firstrose”的答案

有一个办法

先编程把所有的文件访问一遍

一天以后运行程序,每个功能都用用

再回头看最后访问时间,有更新的就是有用的

不管用的.如果是动态加载的,还好说这个方法还行,但如果是java一启动就载入的就不好说了.

linux上有一个好东西

对动态加载的可能有用

inotifywait -m -r lib_path

再启动应该程序,就知道java载入了哪些文件.

0
rick_liao
rick_liao
同问,项目并不是自己一个人在开发,很多jar包不好控制,有可能当时有方法需要用到的jar,过会该方法又可能注释,所以非常需要相关的方法或工具找出多余的jar包
0
winters
winters
我也同问吧。mark下。
返回顶部
顶部