精简JRE过程

1 篇文章 0 订阅
1 篇文章 0 订阅

精简JRE过程


问题描述:

        做了个java程序用exe4j打成exe包后,发现有些客户端没有JDK、JRE还是运行不了,让客户自己安装JRE感觉不太合适,JRE有七八十M直接打包进去也太臃肿,所以想着能不能精简出来一个能运行我的程序的精简JRE?


精简过程:

        分析发现JRE中lib文件夹下的rt.jar文件占了整个JRE的大部分,70M的JRE1.6其中40M是rt.jar,所以精简JRE的主要任务在精简rt.jar,精简思路是找出rt.jar中我们要用到的class,把用不到的class删掉。

1.找出我们要用到的class
        把jre中的bin和lib包复制到跟程序jar包同目录下,如图:

        运行cmd命令行,cd到该jar包所在目录,设置环境路径,以我的实际情况为例:
set PATH=.;E:\EncryptSystem\bin
   然后输出程序所有需要用到的class,使用如下命令:
java -jar -verbose:class EncryptSystem.jar >> classpath.txt
        然后把程序的所有功能都使用一遍,尽量拿到一个尽可能全的classpath,得到的classpath.txt内容样式如下:

2.拿出这些class生成新的rt.jar
        处理成这种方便使用的格式:

        可以简单的用EXCEL的文本导入功能实现这种处理,然后再把“.”替换成“/”,后面加上.class就可以了:

        把class处理成文件路径的格式是为了方便程序替换,我们还要写点简单的代码把rt.jar中我们要用到的这些class拿出来,毕竟就算只拿我们用到的class可能也有好几千个,手工去找还是很麻烦的。

        代码内容就不贴了,大致处理思路是:1.手工先把rt.jar解压到rt文件夹里;2.程序遍历处理好的classpath.txt文件从rt文件夹中找到相应class文件;3.将找到的class文件复制到新文件夹rt_new下的相应路径[按classpath.txt中的路径创建好相应文件夹]下。

        然后把rt_new压缩成rt.zip[注意不要把rt_new文件夹压缩进去,在rt_new文件夹下全选然后压缩就行了],重命名成rt.jar就可以了,这样我们就得到了精简版的rt.jar,我的rt.jar从40M精简到了大概4M。

        用精简后的rt.jar替换掉lib中的原rt.jar,运行小程序,试一试全部的功能是不是能正常运行,如果发现报少class的错,从我们解压开的rt文件夹里找到那个class放到rt_new里相应目录下重新打包成rt.jar就可以了。windows下可以写个bat脚本运行我们的jar包,方便查看错误信息:


        bin和lib里其他文件的精简就不用这么麻烦了,直接逐步删掉,程序不能运行再放回去。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值