继前篇文章《多项目相互依赖的Java程序打包并引入外部Jar包方式》,jar打包好了,虽然再加一个bat来引导jar的运行,还算方便,但用起来总觉得不算专业,于是想试试jar再打包exe。

首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了,但是exe文件在没有安装jre的电脑上不能运行,如果要求客户再去安装jre并设置环境变量就不太人性化了,所以我们需要将jre打包。

这几步操作网上介绍的插件和方法很多,但很多不好用。经过筛选,最终选择了exe4j,并使用install4j来增加安装引导。说到这里,不得不唠叨一句,真不知道开发这类工具的是怎么想的,都要加一个4j,类似dom4j、log4j、exe4j、install4j…

废话不多说,下面发出建议步骤:

1 打包成双击可执行的jar文件。

推荐插件:fatJar(Eclipse使用)

我用的是Eclipse,它自带的打包方法在打包一些图片等资源时不是很爽。可以使用这个插件。安装方法解压后将plugins文件夹下的net.sf.fjep.fatjar_x.x.xx文件夹拷到eclipse安装目录的plugins下。用此工具可以方便的将eclipse中的工程打包成jar文件。如果是要打成可执行的jar请注意选取主类。
你的项目=〉Export..=>向导里有fat jar =>…

具体涉及到多项目的操作,在前一篇文章已有提及,这里不再赘述。

2 将jar文件转换成exe文件。

推荐工具:exe4j

用exe4j把java打包成exe,在我们写程序的时候,有时会有一种需求,那就是希望我们的程序是一个可执行文件,而不是一个jar文件,其实大部份时候,可执行的jar文件都可以满足要求,但是如果我们的程序是需要保护的,那么打包成jar文件就不太安全了,因为jar文件就是一个解压缩文件,一解压就什么都能看到了,当然也可以选择混淆,但是混淆了以后排错就没那么容易了,因为混淆的时候,把一些类的信息都混淆了。如何既保证代码的安全又容易排错呢?那么打包成exe就是一种很好的办法了,其实我今天介绍这个方法并不是希望大家去打包成exe文件,因为exe文件毕竟不是跨平台的,用了exe的格式就失去了java的初衷了。

exe4j可以打包成各种格式的exe,可以把jar打包进exe,也可以引用一个外部的 jar文件,还可以打包成windows服务的程序,并且可以设置最低jre的版本,还可以设定启动画面,虽然java6.0已经实现了这一点,但是还是没有exe4j生成的启动画面快。

详细的打包步骤,网上很多,这里不再整理了。

3 将exe文件并jre打包成安装文件,可以在没有安装java虚拟机的电脑上运行

推荐工具:install4j

install4j是一个功能强大的,多平台Java安装文件生成工具,用于生成Java应用程序本地化的安装及应用程序发布。 install4j的优异性在于它易于使用,紧密的集成到目标平台,以及灵活的JRE 管理与部署选项。

创建发布树
install4j的图形用户界面允许你:
* 完全自定义发布树
在发布树的每一个目录中,你能设置整个目录内容或是磁盘上任何目录的单个文件。定义的视图与结果视图让你能完全控制安装程序将发布的文件。

* 处理特定平台的差异
install4j提供方便的“包含/排除”机制,使其适应平台方式来进行发布。

* 针对Unix, Linux 及Mac OS X所定义的文件权限
对发布树的每一个元素,当其安装在类似于Unix这样的平台上时,你能自定义用户访问的权限。

* 定义优良的卸载策略
对发布树的每一个元素,你能决定在卸载时是否删除它。

* 定义覆盖策略
对发布树的每一个元素,你能配置不同的覆盖策略,当安装过程中需要覆盖文件时,这些覆盖策略会指示nstall4j进行相应的操作。

* 定义安装的组件
你能定义文件及目录的分组,形成分离的安装组件,这样你就可提供给用户来选择只安装一定的组件。

其实一个好的应用如果不太好布署,那么别人也只能对它望而兴叹了,现在有了 install4j,很多布署的问题几乎全部解决了。我们可以用exe4j打包java应用,然后用install4j发布java应用,以前java程序布署难的问题,现在几乎都解决了。install4j不但用于打包很合适,并且它还提供了一组很强大很实用的与平台相关的api。这些对于扩展我们的程序也是有很大的帮助的。