记得当初用 JBuilder 的时候,好像里面有个打包工具有类似的功能。现在用 Eclipse 了,虽说插件很多,但没仔细去研究,不知道有没有做这个的。楼主有兴趣可以去找找。不过,我认为,不做也罢。所谓“不需要的内容”,都清除掉也未必能省太多的尺寸。何况,Java class 之间的依赖关系满复杂的,有些通过反射的方式来加载,理论上没有绝对准确的方法来判定一个 class 是否被依赖。
to XiXiangHou(西乡侯):第一种方法:只能去掉一些在一个包里完全“隔离”并且没有被使用的一群类。事实上,既然在一个包里,很少会有完全隔离无依赖关系的两组类。所以,这种方法真的极有可能一个类都没去掉。而且,无法解决反射方式引用的类。第二种方法:系统稍微有点规模,遗漏将会是必然的。因为即使你有源代码做白盒测试,也难保证必定执行到了代码的每一个分支,更何况是“运行每项功能”这种黑盒测试方式。更况且,一个根本未被使用的private方法或者一个if(false){}代码段引用了一个庞大的包,那你的classloader还是会记录下来这个依赖,虽然实际上它是不必要的。
腰缠70元到月入近10万
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=453IT工程师 毕业4年我年薪涨到30万
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=51126岁青年坐拥千万域名资产 从小玩家变成CEO
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=515程序员的酸甜苦辣:告别Coding
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=341从月薪3500到700万(一)
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=170网络草根月赚3000的十种方法
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=517如果我是女的 我肯定不会嫁给做网站的
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=512
又不是很复杂
并且全部用JAR文件也可以啊,CLASS文件都是挺小一个的,整个包放进来也没什么很大的关系
你不知道那些类是被整个应用引用的?两种方法解决:
1,静态的引用检查
0.揭开你的JAR 文件到文件目录中。
a,看一下JAVA的CLASS 文件的定义规范,每一个CLASS都定义了引用了那些类
所以你可以得到一个CLASS它引用的所有的类。
b,通过递归搜索可以得到引用的所有的类。
c,去掉没有引用的类,打包
优点:快捷
缺点:把实际运行态没有引用的类加入进来了,有可能你一个类也去不掉
可能把Class.forname()的类去掉了而不能正确运行2,动态探测
a,作一个CLASSLOADER,替换掉系统的CLASSLOADER
B,当加载一个类记录一下类被引用了
c,运行所有的功能
d,去掉记录清单中没有引用的类 优点:没有遗漏
缺点:时间长
帮你DING!!!
现在在eclispe一直用fatjar的插件,不知道有没有这个功能,去试一下吧
Class.forName(XX),否则,需要把XX也打进包中。
主要我的程序要做成web start,让用户在web上点击一下就能开始工作,现在压缩以后的jar大概12M左右,如果能缩小体积则会很有帮助。如果哪位知道自动剥离不需要的class文件的方法,麻烦请指教告知,谢谢!
可以采用的策略:
1,分目录压缩,比如:一个包一个 jar 文件
2,自己做客户端的CLASS LOADER ,
当用到这个类时 下载这个jar 文件作解析它,自己加载相关的类。
完成这个工作需要一些技和水平了。好处:不用去管哪些类被引用了
客户端动态的发现需要的类然后下载。
那么:你使用到了哪个模块就下载该模块需要的类。
日常应用可以你只下载了 12M的 很小一部分 可能只有 2M。