今天亲自测试精简jdk1.6.0_17版本的jre,步骤如下:
1. 拷贝一个完整版的jre文件夹到F:\项目集合\messagesend\jre6\
2. 删除jre目录下所有出bin和lib目录的所有文件或目录
3. 打开cmd窗口,设置path路径为空,转到F:\项目集合\messagesend\jre6\bin目录,运行java –version。正常显示当前Java的版本。
4. 在bin目录中新建一个temp目录,将除java.exe和java.dll外的移到temp目录中
5. 再次运行java –version命令,提示Error: no `client' JVM at `F:\项目集合\messagesend\jre6\bin\client\jvm.dll'.
6.将client文件夹拷贝出来,再次运行java –version命令,提示没找到verify.dll。将temp目录中的verify.dll移到bin目录中
7.再次运行java –version命令,Could not create the Java virtual machine.
8. 根据测试:还要将hpi.dll和zip.dll放到bin目录中
8. 再次运行java –version命令,OK,又出现了版本信息。此时,可以将temp目录移出bin目录中。(放到桌面先)
9. 删除client目录中的除jvm.dll外的文件。转到jre目录,查看bin目录的大小,为2.80MB。但此时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,未完,待续。
接上,开始需要检查我做的jar包中引用了哪些jre的class,写个批处理,内容如下:
@echo off
F:\项目集合\messagesend\jre6\bin\java -jar -verbose:class message-send.jar >>a.txt
pause
一看生成的a.txt,rt.jar和charsets.jar都用到了,看来都需要进行裁剪才行。
裁剪之后运行失败,看来还是不能乱裁剪啊,就这样吧。