精简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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
精简jre步骤 1. 拷贝一个完整版的jre文件夹到D盘 2. 删除jre目录下所有出bin和lib目录的所有文件或目录 3. 打开cmd窗口,设置path路径为空,转到D:\jre\bin目录,运行java –version。正常显示当前Java的版本。 4. 在bin目录中新建一个temp目录,将除java.exe和java.dll外的移到temp目录中 5. 再次运行java –version命令,提示没找到verify.dll。将temp目录中的verify.dll移到bin目录中 6. 再次运行 java –version命令,提示:Could not create the Java virtual machine.错误 7. 根据测试:还要将hpi.dll和zip.dll放到bin目录中 8. 再次运行java –version命令,OK,又出现了版本信息。此时,可以将temp目录移出bin目录中。(放到桌面先) 9. 删除client目录中的除jvm.dll外的文件。转到jre目录,查看bin目录的大小,为2.89MB。但此时lib目录仍有60M有余 10. 转到lib目录,新建一个temp目录,将i386除外的目录都移动到temp目录中,再次运行java –version命令,OK 11. 再新建一个temp2目录,将charsets.jar和rt.jar外的所有文件移动到temp2目录中,再次运行 Java –version命令,OK 12. 将temp2和temp目录移到桌面。此时lib仍有48.7M接近50M。(还得努力) 13. 缩减charsets.jar和rt.jar(使用7z工具可以查看和修改jar文件的内容『直接添加和删除』)。准备做个软件来实现。 14. 缩减原则。运行java -verbose:class -version > temp.java 命令,此时在bin目录下生成了一个temp.java文件,用EditPlus打开,看到没有,要加载的就是那些类了,把不需要的全部删除就是了。 15. 原来charsets.jar没有加载呀。直接删除,再次运行java –version命令,OK 16. 接下来的工作就是裁剪rt.jar了。慢慢来。也可以做个软件来完成。可以下载一个GreenJVMMake.jar来完成。不过有时候好像有些类没加载到。要考虑更新了。 17. 裁剪玩rt.jar后,再次运行java –version ,出现了版本信息。OK 18. 转到D盘查看一下精简jre才4.47MB。不到5M。OK 19. 最小的jre制作完毕。 附带制作过程图片,可用Picasa来查看,播放模式效果更佳。 Thoams 2010-6-25 15:53
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值