java打包jar成exe并动态绑定jre再打包成安装檔
注:以下所有步骤的前提是,把jar文件,ico图示(pngImage文件夹),第三方jar包(lib活页夹),jre活页夹,放到同一个活页夹中。
本例放在exe4j Install4j Inno setup活页夹下,如图0
首先,我们选用exe4j把jar执行文件转成exe文件
exe4j.exe下载地址: http://www.ej-technologies.com/download/exe4j/files.html
程序安装不在赘述:
它要求系统有1.5版本以上的JDK,点Download在线下载,如果你的机器上有JDK,点Locate找到你机器上已安装的JDK目录下/bin/java.exe就可以进行安装了。
下面就使用exe4j转换jar为exe的过程详细说明一下:
第1步,默认即可。直接下一步
第2步,如果已经有制作好的jar檔,则下面一个"JAR in EXE"。
对于打包jar檔,在eclipse中右击项目选导出即可,不会制作jar檔可以给我留言
第3步,上面是项目名称,可随便填写,下面一个写出你想要将打包后的exe文件输出的目录:
第4步,由于我的演示程序是图形的,所以选第一个,如果你的程序是控制台的,则选择第二个,Executable name写你将要生成的exe檔的名字,Icon File可以选择生成文件的图示
第5步,首先,单击绿色的"+"号,在弹出的窗口中点Archive,然后找到起初已经做好的jar檔,如图4,"OK"后返回,在下面的Class Path里就出现jar文件路径后,再在上面Main Class栏内点击找到main所在的类,如图5,这一步即算完成:
第6步,一般的应该程序都要带第三方jar檔,同步骤5一样即可,结果如图6.
第7步,你系统的JRE版本,上面填个1.5,下面不填也行,如图7:
当然,这样配置的程序只能在安装有JRE的机器上执行,发布时总要考虑的问题就是用户是否有能力在自己机器上安装JRE,总不能发布一个程序还要用户自己安装个JRE吧,下面我就介绍如何将JDK环境变量动态打包到exe中,在这里单击advanced options(图7中有,如图8),选择search sequence。如图:
在弹出的窗口中,删除列表中所有项,然后单击绿+,选择directory并选择JRE的根目录(注意是拷贝后的目录)即可,(此步注意,选到jre6檔夹即可),如图9
点打开,结果如图10
单击ok后,再从图中单击advanced options,并选择preferred VM,在弹出的窗口中选择client hostspot VM(如图11),单击next按钮继续:
第8步:配置splash screen即exe运行时的过渡接口图,设置如图12
第9步,直接下一步即可,设置如图13
第10步,编辑完成
点击即可生成exe檔(注意输出目标文件夹中不要有相同的目标exe文件)
注:exe4j未注册的版本可以在网上随便找个激活码。
java.exe依照一套逻辑来寻找可以用的JRE,首先查找自己所在的目录下有没有JRE,其次查找自己的父目录下有没有JRE;最后才是查询Windows的注册表。
现在我们的程序可以在任意的计算机上执行了,可是缺点是致命的,比方说我的程序才160K,可是不论走到哪里都要背着70多M的JRE,未免有点小题大做吧,其实作为我们的私有的JRE,好多内容都是可以抛弃的。Jre目录下的license都可以不要,bin下的执行档只需要保留java.exe或者javaw.exe,lib下只要保留rt,jsse,jce,charsets几个库就可以了。除了i386和zi两个子目录外,其余的子目录都可以不要。Zi下只需要保留自己地区的子目录和其下的一些檔就可以。Lib下除了库之外的属性文件等等都要保留。这样清理一番,JRE仍然有接近50MB。还可以继续清理几个库檔里面不需要的内容,这需要仔细的整理,会很费功夫。最好能写出一个自动工具帮助我们整理它们。从Sun公司上下到的JMF里面附带的用Java写的媒体播放器就自带了JRE,只有几个MB。
清理过后需要运行几遍我们的应用程序,以确保我们的JRE不缺少东西。
另外,精简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,需要的,可以自己上网找下。
其次:用Inno Setup把exe文件和jre打包成安装文件(此处转载的)
一.使用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发给其它人安装使用
注意设置:以管理员身份或非管理员身份启动设置
添加管理员权限
1、在[Setup]节点添加 PrivilegesRequired=admin
2、进入安装目录,找到文件SetupLdr.e32,这是一个二进制配置文件,需要用到ResHacker.exe这个工具修改
找到
修改为
删除管理员权限
1、在[Setup]节点添加 PrivilegesRequired=none 或者 PrivilegesRequired=lowest
2、在[Setup]节点修改 DefaultDirName(安装路径)的值,默认可能是DefaultDirName={pf}\{#MyAppName},
不要带{pf}, {win}, {sys}这些变量值,比如设置成DefaultDirName={localappdata}\{#MyAppName}