Java程序完成以后对于Windows操作系统习惯总是想双击某个exe文件就可以直接运行程序现我将一步一步的实现该过程最终结果是:不用安装JRE环境不用安装数据库直接双击一个exe文件就可以运行程序
下面我将以我最近写的一个程序作例子进行该打包过程
该程序是使用了:HibernateSpringDerby的Java GUI(JDK需要版本因该版本才有Derby)我使用的是Eclipse进行开发
第一步:完成Java GUI程序
在Eclipse下程序能够正常运行
第二步:准备清单文件(MANIFESTMF)
方法:直接拷贝其它能运行的JAR文件中的MANIFESTMF进行修改
方法:利用IDE工具如Eclipse在生成JAR文件时自动生成
MANIFESTMF内容如下:
ManifestVersion:
MainClass: manageruiMainFrame
ClassPath: /lib/springjar /lib/hibernatejar /lib/derbyjar
SplashScreenImager: manager/resources/images/splashjpg
说明:
ManifestVersion - 指定清单文件的版本号
MainClass -指定程序运行的入口类注意类名后不要加class扩展名
ClassPath -指定支持库的路径指程序运行目录即导出的JAR包所在目录程序运行时依据ClassPath项的设置路径来查找支持库每一个支持库之间用空格隔开在这里使用了hibernatespringderby
注意:
如果Java应用程序用到了一些Eclipse包那么就必须将这些包也复制到程序运行目录设置到ClassPath否则程序将无法运行引用了一些外部组件也需要如此设置如hibernatespringderby
除了入口类的包名和类名之外其他设置项都不分大小写比如ClassPath写成classpath或CLASSPATH也可以swtjar写成SWTJAR也行
类名后不要加class扩展名
每一行的:后都有一个空格如ClassPath:<空格>/lib/springjar
ClassPath中引入的JAR文件每行不得超过个否则会报错但在让人意外的是每行只有前个有效故将所有同类型的JAR文件做成一个JAR文件如我这里的springjarhibernatejarderbyjar都是同类JAR文件的组合
第三步:修改spring配置文件
在spring的 sessionFactory bean的配置中则要这样写(与程序中ClassPathXmlApplicationContext对应)
<property name=mappingLocations>
<list>
<value>manager/entity/MyFilehbmxml</value>
<value>manager/entity/FileTypehbmxml</value>
</list>
</property>
第四步:使用Eclipse生成JAR文件
右键单击项目名在弹出菜单中选择Export在弹出的如下图所示的对话框中选择JAR文件单击Next
将右边不需要的文件都取消勾选在选择导出目标(Select the export destination)项文本框中设置JAR包的输出路径和包名(可以任意取名)为D:\manager\managerjar接受其他的默认设置不变单击Next
附注左边虽然选择了src目录但源文件并不会导出到包中除非勾选了导出Java源代码文件和资源(Export java source files and resources)项
接受默认设置不变单击Next
这一步较关键如下图所示选择从工作空间中使用现有清单项将创建的清单文件输入也可以通过旁边的浏览按钮来选择清单文件输入清单文件后单击FinishEclipse开始将项目打包
附:这里也可以选择Generate the manifest file但生成的清单文件MAINFESTMF需要修改
注意:清单文件MAINFESTMF一定要按第二步那样设置
生成的JAR文件目录如下:
第五步:生成运行managerjar的批处理文件managerbat(该步可以不要)
在manager目录下创建一个批处理程序managerbat(名字任取扩展名必须是bat)其内容仅一句语句如下
javaw jar managerjar
说明
javaw对应c:\jdk\jre\bin\javawexe文件如果windows提示命令未发现则需要将c:\jdk\jre\bin路径加入到windows环境变量path中
在运行程序的时候有一个讨厌的黑色命令行窗口要去掉它可以将runbat内容更改如下start javaw jar managerjarstart是指调用了windows的运行命令
在后边加一个pause就可以让你看到具体哪里出错了如:
start javaw jar managerjar
pause
双击managerbat就可以运行该JAR文件了
第六步:让电脑不必安装JRE环境也能运行
通常运行Java程序有个前提条件用户电脑必须先安装JRE环境虽然安装JRE环境非常简单但毕竟多了一步算是有一点点的瑕疵这里给出一个不必让用户安装JRE环境的方法其实现步骤如下
()将原JDK中的jre目录复制到D:\manager\java目录下(java也可换成其他名称)
()将JDK和JRE从本机卸载掉这样表示本机没有安装JAVA运行环境
()修改批处理文件managerbat中的命令为start java\jre\bin\javaw jar managerjar仅仅是在javaw前加上了一个相对应路径
双击managerbat即可在不安装JRE环境的电脑运行此Java应用程序
第七步:抛弃批处理文件(*bat)生成exe文件
用批处理文件运行程序似乎不够专业虽然它足以完成运行任务但习惯就象一种毒药一旦染上就很难摆脱它的影响Windows统治下的人们早已经习惯运行扩展名是EXE的程序用*bat他们就会感觉别扭
我们可以用一个叫JavaLauncher的免费小程序来代替批处理文件去运行Java程序JavaLauncher的下载网址是
下载下来的文件是一个名JavaLauncherzip的压缩包解压后的目录结构如下所示
JavaLauncherzip目录结构
source 目录包含了JavaLauncher的源程序是用C语言写的
changestxt 是新版的修改说明
launchexe 是主程序
launchercfg 是配置文件
readmetxt 是一些说明和示例
我们只需要launchexelaunchercfg两个文件将这两个文件复制到打包文件所在的目录launchercfg是一个仅三行内容的文本文件将它修改如下
\java\jre\bin\javawexe
jar managerjar
第一行设置指向JAR包managgerjar的目录由于launchexe和myswtjar同在一个目录所以用即当前目录
第二行设置指向jre\bin\javawexe的路径在上面已将jre目录复制到了java子目录中
配置好launchercfg后双击launchexe即可运行java应用程序
如果仔佃研究eclipse的启动方式发现eclipse和JavaLauncher的原理一样eclipseexe相当于launchexestartupjar相当于managerjar只不过eclipseexe不象launchexe要具有通用性所以它没有*cfg这样的配置文件而是将启动信息固化在eclipseexe中
第八步:美化图标
launchexe文件的图标太单调了让我们给它换个好看点的换程序的图标需要用到一个免费的软件Resource Hacker
第九步:最后的打包
发送给用户之前通常要用WinZip或WinRAR将所有的文件全部打成一个压缩包然后用户得到这个压缩包后将其解压缩后即可运行程序Eclipse软件就是这种方式
另一种方式是用InstallShieldInstallAnyWhere这样的安装程序制作软件来创建一个单一的setupexe文件它具有向导式的安装界面而且还可以往windows的程序栏插入菜单项关于这些安装程序制作软件的具体使用请参阅相关书籍