1.把程序的class文件打包成jar文件
因为我用的开发工具是eclipse,一般都是用它的插件fatjar打包class文件。
fatjar下载地址:http://sourceforge.net/projects/fjep/files/
本篇使用的测试程序是上一篇:
借助浏览器控件利用CSS和javascript设计桌面程序界面中的HtmlFrame.jar
2.把jar文件转成exe文件,window平台上可运行的文件是exe,这一步需要把带main()方法的jar文件转成exe,
新建文件夹HtmlFrame2,把HtmlFrame.jar和tree.html,放进这个文件夹内,现在的HtmlFrame.jar只能在装了jre的机器上跑,要让它在没有装jre的机器上跑,我们需要为HtmlFrame.jar配一个jre,在一台装有jre的机器上把整个jre文件夹复制到HtmlFrame2,如我本机装了JDK1.6.0_17,路径C:\Program Files\java。可以直接把C:\Program Files\java中的文件夹jre6(也可以C:\Program Files\java\JDK1.6.0_17中的jre文件夹)复制到HtmlFrame2中,现在HtmlFrame2文件夹中有
HtmlFrame2\HtmlFrame.jar
HtmlFrame2\tree.html
HtmlFrame2\jre6
要让HtmlFrame.jar可以运行,需要告诉它jre的路径。一种方法是用bat文件为HtmlFrame.jar设置classpath;另一种方法是通过第三方工具,如exe4j。
第一种方法:使用bat文件启动。新建文本文档HtmlFrame.txt,输入代码:
@echo off
set classpath=.;jre6\lib\dt.jar;jre6\lib\tools.jar
set path=jre6\bin
start javaw -classpath HtmlFrame.jar com.pengo.main.MenuTest
保存文件,并把文件名改为HtmlFrame.bat,现在只要把整个HtmlFrame文件夹复制到其它没有装jre的机器(window系统),双击HtmlFrame.bat都能运行。为了下一步安排包的制作,把bar转成exe,借助BatToExeConverterSetup(一个把bat转成exe的工具)把HtmlFrame.bat转成HtmlFrame.exe。
第二种方法:使用 exe4j 把jar转成exe, 注意:exe4j 只能把jar转变成 exe,它并不能把整个java程序的文件(例如jre)打成一个 setup.exe 安装包。下边是它的使用说明:
第1步,默认即可,直接点击next。
第2步,选择"JAR in EXE",点击next
第3步,上面是项目名称,可随便填写,下面一个是把jar转成exe文件后,exe文件的输出目录(建议和原jar路径一致):
第4步,HtmlFrame.jar是GUI程序,所以选第一个,Executable name是生成的exe文件的名字,Icon File可以选择是这个exe文件的图标
第5步,单击绿色的"+"号,在弹出的窗口中点Archive,然后找到HtmlFrame.jar,"OK"后返回,在下面的Class Path里就出现jar文件路径后,再在上面Main Class栏内点击找到main()方法所在的类,这一步即算完成:
第6步,确认系统的JRE版本,上面填个1.4,下面填1.6:
上边配置的程序只能在安装有JRE的机器上执行,但发布时要考虑用户的机器上是否安装有JRE,总不能发布一个程序还要用户自己安装个JRE,下面为将要生成的exe指定jre路径,在这里单击advanced options,选择search sequence。先把Search Sequence列表内所有选项删除,再点击绿色"+",Entry Type选择Directory,再在下边的路径选择中选择HtmlFrame2\jre6,
单击ok后,再从图中单击advanced options,并选择preferred VM,在弹出的窗口中选择client hostspot VM,单击next按钮继续:
第7步,设置程序的启动画面,单击next
第8步,设置提示消息的语言,单击next
第9步编译
第10步,完成
点这个看到效果了:
使用exe4j把jar转成exe后,原来的HtmlFrame.jar可以删除。只保留生成的exe就可以了。
至此,jar转exe的工作已经完成。
3.精简jre
整个HtmlFrame2\jre6未压缩前,大约是100M左右,如果把它也放进安排包,那么整个安排包的体积将会很惊人,下面对jre进行精简。
进入jre6目录,jre6目录内,除了bin和lib两个文件夹外,其它所有文件都可以删除;
进入jre6\bin,随便删除一个文件,双击HtmlFrame.exe,如果能运行,那么这个文件就是可以删除的,如果不能运行,就把这个文件还原回去。通过这个方法清理后bin和lib里面的文件,体积大概能减一半。
进入jre6\lib,你会发现rt.jar这个文件,大概40M,这是Java基础类库文件,里面有几千个.class类文件,但其实许多.class在程序里并未使用。先用WinRar解压rt.jar,随便删除rt文件夹里面的文件,再用WinRar把rt文件夹内的其它文件压缩成一个zip格式文件,把zip后缀改成jar,放回jre6\lib中,双击HtmlFrame.exe,如果能运行,则是可以删除,不能运行,就把类还原回去,再重复上边的操作。这个方法精简jre会比较累,不过这是我目前找到的最有用方法了。
关于精简rt.jar的方法,网上也有一些工具如:GreenJVM等,可以直接精简rt.jar,可以把rt.jar体积减少到3M左右。不过本人用这些工具精简出来rt.jar未试过可以运行,估计是漏掉一些class。
另外可以在dos下使用命令:
java -jar -verbose:class HtmlFrame.jar >>class.txt 把用到的class输出一个txt文件中,再对比进行删除。
网上也有人提供一些精简过的jre,需要的,可以自己上网找下。
4.使用inno setup把整个HtmlFrame程序制作成setup.exe安排包。inno setup是一个免费的、使用非常简单的安排包制作工具,本篇文章使用的是inno setup简体中文版本。有兴趣的,也可以使用其它安装包制作工具。随便提一下另一个专门针对java程序的安装包工具install4j,假如在步骤2中没有给程序指定jre,install4j可以为程序绑定一个jre到安排包中。
本篇使用的inno setup简体中文版本。启动inno setup,选择文件→新建,
第1步,inno setup的脚本欢迎向导
第2步,配置应用程序基本信息
第3步,应用程序文件夹信息
第4步,选择应用程序文件,主执行文件选择HtmlFrame.exe;其它应用文件需要把这个程序的相关资源文件和jre也添加进去,我这里所有相关的文件都放进HtmlFrame2文件夹内,因些直接“添加文件夹”选择HtmlFrame2,"其它应用程序文件"列表内所有的文件都将会被打包到setup.exe文件内。
第5步,设置应用程序图标
第6步,设置安装期间相关的显示文件
第7步,安装语言
第8步,编译输出文件名指安装包的文件名,如输入setup,生成的安装包将为setup.exe;编译输出文件夹指生成的安装包setup.exe的路径;安装程序图标文件指安装包setup.exe的文件图标;
之后的直接点“下一步”,在出现立即编译新的脚本提示时,点击“确定”进行编译。
编译完成后将会在“编译输出文件夹”生成一个setup.exe文件。
整个安排包的制作过程到此已经完成,现在可以把setup.exe发给其它人安装使用。
附件是我按上边步骤制作出来的安装包,需要的可以下载看下效果:
附件: setup.exe.rar