如何把jar打包成exe,做个教程好了。
在这里,我们要实现两个目标:
1.把java程序文件(jar文件)打包成应用程序文件(exe文件)。
2.捆绑jre,使java程序能在java环境的电脑上运行。
下面,我将会介绍市面上的三款小软件,利用其中的一款或两款,就能实现上述目标:
1.Jar2Exe Wizard,该软件能实现目标1。
2.JavaLaucher,该软件能实现目标2。
3.exe4j,该软件能同时实现目标1和目标2。(附件中的版本好像是64位的,如果32位的系统不能用的话,请自己用百度搜吧。)
不过在此之前,我们得准备一些实验素材:1个jar文件,一张png图片
![](https://i-blog.csdnimg.cn/blog_migrate/d048f0e9111fe1ad0e310a6261acf53c.jpeg)
但是这样还不够,因为exe文件的图标得是ico格式的图标文件,所以我们得先把图片转换成图标。在这里,我推荐两个在线图标制作的网站:converticon.和谐com、www.和谐ico.la。个人喜欢前面那个,因为至少界面好看多了。
好了,打开网站后,点击Get Started:
![](https://i-blog.csdnimg.cn/blog_migrate/634cec52d756a56c6767dfc4a0f2dc0a.jpeg)
弹出浏览窗口后,选择我们准备好的这张图片:
![](https://i-blog.csdnimg.cn/blog_migrate/1a1f3c4e3d916cdf9c80964c1a892a01.jpeg)
点击Expot:
![](https://i-blog.csdnimg.cn/blog_migrate/a1fa4d281d7134365ce249dd3cff9239.jpeg)
选择需要的尺寸,并点击Save As(那个Original Size是原尺寸的意思,这里不建议使用,貌似制作出来的有问题):
![](https://i-blog.csdnimg.cn/blog_migrate/c41e06151eb1748bfeb77a7089fc19b6.jpeg)
都保存到D盘好了:
![](https://i-blog.csdnimg.cn/blog_migrate/d3980f925e169bdd34bec5882d7cb629.jpeg)
于是我们现在有了以下三个文件:
![](https://i-blog.csdnimg.cn/blog_migrate/978f932c31166fe75a16bea293b3583b.jpeg)
好了,前期准备工作做完了,现在我们开始使用上面说的小软件吧。
首先,我来介绍一下Jar2Exe Wizard,Jar2Exe Wizard作为一款打包软件,其优点是操作方便(我这里用的是1.8版本的,1.6版本的更简单一点),缺点是没有捆绑jre功能。
我们打开这个j2ewiz.exe文件:
![](https://i-blog.csdnimg.cn/blog_migrate/a54a8af2c1fb1c85f9d9404868622aad.jpeg)
点击“浏览JAR”,选择需要打包的jar文件,在下面的版本号中选择相对应的jre版本,稍微选低一点貌似也无所谓:
![](https://i-blog.csdnimg.cn/blog_migrate/5d992cb3fd301a4de7d84358be969731.jpeg)
因为我的这个程序是个窗口程序,并不需要控制台,所以我选择第二个,如果想要显示控制台,可以选第一个:
![](https://i-blog.csdnimg.cn/blog_migrate/f0507adda8edf8f1b95f1b8a553dbb6e.jpeg)
软件会自动识别main方法所在的类,如果有多个的时候,就得选择了。下面那个Splash窗口,由于该软件貌似不支持透明的图片,所以这里就不设置了(至于Splash窗口是什么,用过adobe软件的同学都知道,打开软件之前会有一个花哨的窗口,那个就是了):
![](https://i-blog.csdnimg.cn/blog_migrate/fc040965dbf8650a12dcd6a52b5dd003.jpeg)
反正我也不会反编译打包过的文件,而且也不怕别人反编译,所以我就不隐藏class文件了:
![](https://i-blog.csdnimg.cn/blog_migrate/f7c6585c9891a7f716faf9dad6f750cc.jpeg)
我这个程序也没有引用什么jar包,所以也不需要设置了:
![](https://i-blog.csdnimg.cn/blog_migrate/5cea162c40ec840d5b51d68ab02914b5.jpeg)
上面是输出路径,大家都懂的,下面的“图标及版本”按钮,请按一下:
![](https://i-blog.csdnimg.cn/blog_migrate/73df2a7b35f3f5e4b83d5751c7d85128.jpeg)
点击“添加”按钮可以添加图标:
![](https://i-blog.csdnimg.cn/blog_migrate/a513b4dc173fafe81d8c4c53ee082173.jpeg)
找到我们准备好的图标:
![](https://i-blog.csdnimg.cn/blog_migrate/f2965f061e03a77230037ebb12c0e025.jpeg)
这里可以添加多个图标,我们一个就够了。下面是版本号,随便填一下。再下面是一些版本信息,双击可以弹出修改窗口,我把重要的都填一下,到时候打包后的exe文件的属性中就能看到这些信息了:
![](https://i-blog.csdnimg.cn/blog_migrate/1fd9f4a056b5671dfa072858ec8467de.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/47852f50382e29f30db2084ebecda86e.jpeg)
点击OK,回来后,发现图标变了,至于下面这个复选框,不重要:
![](https://i-blog.csdnimg.cn/blog_migrate/75575df24e6cba61ab55770bd29a16af.jpeg)
当你看到这一页的时候,打包已经完成了,你可以点击右上角的叉叉关掉了。当然,如果点击“参数配置”按钮,配置完后,则会在当前目录生成一个配置文件。
![](https://i-blog.csdnimg.cn/blog_migrate/0468da446e0a21d89a3fc154e9bb40f9.jpeg)
看,exe文件出现了,好神奇!
![](https://i-blog.csdnimg.cn/blog_migrate/d2bc4712dae51f632d0dbc7692c9e605.jpeg)
下面,我们要利用JavaLaucher进行打包,其优点是操作方便,修改也方便,缺点是要以“Lauch.exe”这个文件打开。
我们在D盘创建一个文件夹,把jre文件夹、打包后的“FileMerge.exe”文件和“Launch.exe”文件都复制进来,然后新建一个记事本:
![](https://i-blog.csdnimg.cn/blog_migrate/8436324e18bfbd52848fc02b56860aa6.jpeg)
把记事本重命名为“launcher.cfg”,注意,文件名为“launcher”,扩展名为“cfg”:
![](https://i-blog.csdnimg.cn/blog_migrate/e0c01902c02cf71eef97c1f72de36f5d.jpeg)
打开“launcher.cfg”文件,在第一行写上“.”,即当前目录,在第二行写上“javaw.exe”文件的路径,在第三行,先写上“-jar”,加空格后,再写上打包后的java程序路径(第二行和第三行的“.\”可以省略,“Launch.exe”文件、jre文件夹和java程序都可以随便放,只要路径写对就行,但是“launcher.cfg”文件必须和“Launch.exe”文件放在同一目录)。
![](https://i-blog.csdnimg.cn/blog_migrate/d9e2bab895e8373071da734455212583.jpeg)
是不是感觉很眼熟?没错,其实这就是调用命令提示符执行“jre1.7.0_45\bin\javaw.exe -jar data\FileMerge.exe”命令。如果你没有“Launch.exe”文件,新建一个记事本,将扩展名改成“bat”(批处理文件),在里面写上“jre1.7.0_45\bin\javaw.exe -jar data\FileMerge.exe”,然后双击,也能运行,只不过多了个命令提示符窗口。
也就是说,“Launch.exe”文件实质上就是一个用C#写的调用命令提示符的小程序而已。
如果觉得JavaLaucher有点坑,那么可以试试exe4j这个软件。该软件的优点是集打包和捆绑jre为一体,支持透明通道的Splash窗口,而且没有那么一堆配置文件,但是缺点是操作复杂,而且想改路径得重新打包,对了貌似我没找到填写版本信息什么的。
首先我们回到最初,一个jar文件,一个png图片文件,一个ico图标文件,都放在D盘根目录。
![](https://i-blog.csdnimg.cn/blog_migrate/e08063f87c8bba8ac544fca49226d6c3.jpeg)
下面我们在E盘创建一个文件夹(作为打包输出目录),把jre文件夹放进来(打包输出路径不要是源jar文件所在目录或其子文件夹,这样会导致exe4j找不到主类,别问我为什么,我也不知道):
![](https://i-blog.csdnimg.cn/blog_migrate/21937094113806a23c6b20c4b8374a18.jpeg)
好了,打开exe4j,出现第一个界面,可以看到,我用从百度上找的激活码激活了的(没激活的exe4j,使用Splash窗口的话,在Splash窗口前还会弹出个提示,内容是“this executable was created with an evaluation version of exe4j”):
![](https://i-blog.csdnimg.cn/blog_migrate/fdcad219326a3badfa131841c3ff2212.jpeg)
选择“JAR” in "EXE" mode:
![](https://i-blog.csdnimg.cn/blog_migrate/0dc56d27c95addf9c65e0260a7bc0302.jpeg)
上面填的是程序名称,下面红框里的是打包输出路径,即打包后文件的保存路径,就是前面说的新建的文件夹:
![](https://i-blog.csdnimg.cn/blog_migrate/7e468160c7049f2c3bb33b85344fafd9.jpeg)
最上面的单选框和Jar2Exe的一样,窗口、控制台和服务,复选框是是否支持运行参数。接下去是打包后的文件名。再下面是图标文件的路径。那个我没打勾的复选框,如果勾上,那么打包后的exe文件,无论你双击四次八次,都只能打开一个。其他的默认就好。
![](https://i-blog.csdnimg.cn/blog_migrate/8263e9a63ba8a58880aafb96d918674f.jpeg)
看到右边绿色的加号按钮了吗?赶紧点下去!
![](https://i-blog.csdnimg.cn/blog_migrate/599b5972d1499c007d9af4c20568998a.jpeg)
找到要打包的jar文件:
![](https://i-blog.csdnimg.cn/blog_migrate/763246d1a1f56799d0c7119787d9ed5d.jpeg)
要打包的jar文件出现在列表里了,这么貌似能添加多个,我不知道是什么心态……对了,再猛击哪个红框中的按钮:
![](https://i-blog.csdnimg.cn/blog_migrate/47fd709d3df71b0c0d8b89b7837fa7a7.jpeg)
这里会自动出现所有的主类,我们得选一个。上面说过了,输出路径得注意,如果打包输出路径是源jar文件所在目录或其子文件夹,那么这里就不会出现主类了:
![](https://i-blog.csdnimg.cn/blog_migrate/055f2df3e9c2d35365f60223183b4d26.jpeg)
点击OK后,主类出现在这里了:
![](https://i-blog.csdnimg.cn/blog_migrate/062483951f8e0def67cdcc5b12e61c26.jpeg)
这里要设置允许的最低jre版本,如果要支持透明通道的Splash窗口,那么至少得写1.6,对了,不能不写。下面的看着办,按需要设置。设置完后别急,别点NEXT,点击Advanced Options或者选择左边红框里的子页面:
![](https://i-blog.csdnimg.cn/blog_migrate/df0a495d4eea4a82f5507d6843e08710.jpeg)
这里列表显示的是jre的搜索序列,如果不想捆绑jre,这步可以跳过。可以看到,先搜索的是注册表(jre安装的时候,会在注册表登记路径,所以移动jre会使jre失效),然后再是JAVA_HOME,第三是JDK_HOME,后两个是系统的环境变量。我们现在点击右边的绿色加号按钮:
![](https://i-blog.csdnimg.cn/blog_migrate/584bfb88b95444d8b311184da7ab3890.jpeg)
先选择上面的Directory,再点击下面红框里的按钮:
![](https://i-blog.csdnimg.cn/blog_migrate/7231fac0f648f5d36af92d277e1ab67f.jpeg)
选择我们复制到输出目录的jre文件夹:
![](https://i-blog.csdnimg.cn/blog_migrate/170eab83be7b8f621927f71884c2b4a9.jpeg)
选择后变这样,因为是在输出目录中的文件夹,所以是相对路径“.\XXXXX”:
![](https://i-blog.csdnimg.cn/blog_migrate/83c4ba3bb70b2174f53d9f470c4b06ac.jpeg)
新加的搜索路径放在最后面可不行,我们点击右下角的向上按钮,把它移到第一位:
![](https://i-blog.csdnimg.cn/blog_migrate/be4dd9b74ef9e77110f4d6e780fc10f1.jpeg)
其实下面3个路径可以不要,有兴趣的话,可以删掉它们,选中后按右边的红色叉叉按钮就行:
![](https://i-blog.csdnimg.cn/blog_migrate/f7076a96798f2cb6b6eaf7557ff0e4e3.jpeg)
好了,设置Splash窗口了,单选框第一个是无Splash窗口,第二个的Splash窗口是不支持透明通道的,第三个Splash窗口支持透明通道,但是必须jre6以上,然后在下面选择我们那张png图片:
![](https://i-blog.csdnimg.cn/blog_migrate/e16e6416505fa2d95a9938ec32f02676.jpeg)
这里没什么可设置的,直接过:
![](https://i-blog.csdnimg.cn/blog_migrate/83e0e21a258d4c6c59ab4727d1ab6a40.jpeg)
然后就是打包时间,很快的,好不容易才截到图:
![](https://i-blog.csdnimg.cn/blog_migrate/9c2cbf744962bd36bbf3ee6d1a38fd74.jpeg)
之后自动进入这个页面,至此,jar文件已经打包成exe文件了,这里的界面是问你是否保存刚才的操作的:
![](https://i-blog.csdnimg.cn/blog_migrate/acb2e55c2ff7b5c3a58cd0f744329732.jpeg)
看,出现了!出现了耶!
![](https://i-blog.csdnimg.cn/blog_migrate/3d88904868b89fb5535640be0a84082d.jpeg)
好了,教程到此结束,我把素材也上传一下吧,5个附件,分别是Jar2Exe Wizard 1.8、Launch.exe、exe4j、FileMerge.jar、merge.png。