Java桌面应用程序发布

java桌面,java桌面应用,桌面应用发布,java,exe,jsmooth,installer,安装包

最近用Java做了一个单机桌面程序, 就是想看看用Java开发桌面程序到底能够达到什么样的程度.

通常网上介绍的开发桌面程序(这里没有特指则都指用Java开发桌面程序)都是说用工具打包成一个jar,然后通过配置MANIFAST.MF来配置主程序和第三方类库.以后就可以通过双击jar使用本地的jvm来执行.

我这里在用一些工具把jar包装成exe,再把依赖的资源文件和exe一起发布为windows安装包.
使用的工具:
ant/eclipse – 把程序打包为jar
proguard4.0beta -混淆
jsmooth0.9.9 – 把jar打包为exe
HM NIS Edit2.0.3 -制作安装包程序

一个完整的发布过程应该还包括:加密,签名,这里暂不涉及。
下面我详细的说一下这四个步骤

第一步:把程序打包为jar
首先用ant或者eclipse打包程序为可执行的jar。也就是要在MANIFEST.MF指定main class,然后如果又第三方库的话还要指定Class-Path,如:
Manifest-Version: 1.0
Main-Class: com.modofo.mobarbr.Launcher
Class-Path: lib/ibatis.jar lib/spring.jar lib/commons- logging.jar lib/quaqua.jar lib/commons-dbcp.jar lib/commons-pool.jar lib/alloy.jar

注意:
1.Manifest-Version必须要指定,否则MANIFEST.MF文件将无效,也就是和没有一样
2.Class-Path里每一个jar要以一个空格隔开
3.如果用Eclipse打包的话,最好是使用自己写一个MANIFEST.MF,而不要让Eclipse自己去生成,因为自动生成的无法设置Class-Path
4.Class-Path中的路径指的是打包好的jar包执行所在的路径的相对路径,好像有点表达的不清楚:),例如
如果你打包好的jar叫modofo.jar并放到了D盘的根目录下,那么你需要在D:/lib中放入那些第三方依赖包,这样你的jar才能执行。
(我一开始以为是要把这些也打包到jar里)
第二步:混淆
使用proguard4.0beta,这是一个很强大的优化混淆工具,使用很简单,可以用。不详细介绍。还有一个国内的Java混淆器,感觉不是很好用,可能是不会用吧。
我的程序因为用到了spring,所以混淆起来不太方便,后来也就没有混淆。看来用spring做桌面程序有点问题,DI的信息都暴露了?有没有把文本文件也混淆掉的工具呢?-这个似乎把问题搞复杂了。-为什么要混淆呢? – 2007-11-11

第三步:把jar打包为exe
jsmooth,最新版本0.9.9,
可以设置依赖包的位置,jre的位置,这样你可以同时在制作安装包时捆绑一个jre,用你随同程序发布的jre。不过这样的代价是在发布的时候把jre也打包进去,80多兆阿!
jsmooth同时支持ant,你可以把这个过程也整合到build.xml里不需要每次都手动生成

<taskdef name=”jsmoothgen” classname=”net.charabia.jsmoothgen.ant.JSmoothGen” classpath=”resources/jsmoothgen-ant.jar” /> –定义task,指定路径
<target name=”genexe” depends=”archive”>
<copy todir=”${dist.dir}/db”>
<fileset dir=”db” />
</copy>
<copy todir=”${dist.dir}/lib”>
<fileset dir=”lib” />
</copy>
<jsmoothgen project=”resources/mobarbr.jsmooth” skeletonroot=”resources/skeletons” /> –必须要指定jsmooth配置文件,是你用jsmooth的配置程序生成的文档,skeletons是jsmooth用到的骨架文件,必须要指定
</target>

打包之后的文件路径结构:
projectroot
|_dist
| |_lib/*.jar
| |_db/*.*
| |_jre/*.* (如果有jre,你需要把jre所有文件copy到这里)
| |_myapp.jar
| |_myapp.exe
|_build.xml

这个时候如果把dist下的文件做成压缩包就可以发布了,绿色且跨平台的。如果这个已经满足了要求,下面的可以不用看了 。

第四步:制作安装包程序
NSIS是一个很很牛x的制作安装程序工具,但是它是要自己编写脚本。我懒,但我知道我不是第一个懒人,所以在sf上找到了 HM NIS Edit,可以通过一个配置向导直接生成NSIS脚本,进而生成安装包,向导很简单基本不需要看帮助,试几次就应该可以用的很熟了。
生成好的安装包在安装时可以选择安装的component,可以配置jre作为可选组件,这样用户在安装你的程序时可以选择不安装jre。
NSIS还会自动帮你生成卸载程序。
这样一个 myapp-setup.exe文件就生成了,运行起来和一般的window程序几乎没有差别。(启动稍稍慢一点),但它只是在window下使用的。

此外还试用了其他的安装包程序:
advanced installer:很强大,但是收费,推荐
installjammer:开源,但安装过程不支持中文
小兵安装包制作工具:国产,但收费
NSIS开源社区最流行的打包程序,需要学习脚本,但有NIS Edit,一切就简单了。
上面的过程基本没有涉及很细节的地方,如果要细节的话每一步都需要一篇详细介绍还要截图(都说了我很懒了),我觉得最重要的是工具的使用,怎么在各种各样的工具里找到最适合你使用的。
如果有问题可以一起探讨

697 thoughts on “Java桌面应用程序发布”

Comments are closed.