制作Java
安装程序
这个工具利用 ANT
来制作在 Windows, MacOS X, Unix
平台上可执行的文件,比如 exe
,zip
,jar
。ROXES ANT Tasks
基于 GPL
发布。
[url]http://www.roxes.com/produkte/rat.html[/url]
企业开源参考架构
Java Web
应用产品安装程序制作方案
目录:
一.背景
二.开源工具
三.环境准备
四.技术准备
4.1. Jsmooth
4.1.1. Jsmooth
简介
4.1.2.
工作原理
4.2. IzPack
4.2.1.IzPack
简介
4.2.2.
工作原理
五.方案实例
六.结束
一.
背景:
随着Java
在应用产品开发中的广泛应用,基于Java
的应用产品也就越来越多,那么如何为基于Java
的应用产品制作安装程序的需求就产生了。以前人们一般都是使用InstallShield
与InstallAnyWhere
进行产品安装程序的制作,这是两个功能非常强大、易用的安装盘制作工具,尤其是InstallAnyWhere
,它还支持Java
应用产品安装制作,例如:大名鼎鼎的Jbuilder
安装程序就是由它制作的。
本文并不准备对这些商业的安装制作工具进行讨论,本文将就如何利用开源的安装制作工具来进行Java Web
应用产品程序制作进行一些探讨。
二.
开源工具:
目前用于支持Java
应用安装程序制作的开源工具非常丰富,本人将要本人在研究过程中所遇到的罗列一二以供参考:
Packlet
Packlet
是一个简单的Java
安装制作工具。它将Java Application
打包成一个可以发布的类似于zip
或tgz
的压缩文件中。这个压缩文件被简为packlet
,它可以在安装有Java 2 Runtime Environment
的操作系统上执行.
通过执行packlet
将会给用户提供一个图形化的安装配置界面并解压应用。
Go To Packlet
IzPack
IzPack
是一个用于Java
平台的安装程序生成器。它用于产生一个轻量级、能运行于所有安装了JVM
的任何的操作系统的安装程序。生成的安装程序可以通过双击或在Command Line
通过java
�Cjar install.jar
命令进行启动,安装程序运行的方式具体将看操作系统的支持方式。IzPack
的主要好处就是能够生成运行于任意操作系统的安装程序。
Go To IzPack
JSmooth
Jsmooth
可以将Java
可执行应用Wrapper
成window
可执行Exe
程序。通过Jsmooth
生成的Exe
程序会自动按制作时定义的顺序寻找合适的JVM
,如果能不查找到JVM
,安装程序会提示用户并能根据定义好的URL
启动Web Browser
让用户下载JVM.
注意:Jsmooth
并不是纯Java
应用。
Go To JSmooth
VAInstall
VAInsall
是一个用Java
写的多平台安装程序工具。它是基于GNU GPL2.0
许可。通过一个简单的配置文件,它允许安装程序打包工具由不同的目录下收集程序包,这与一般情况下安装程序制作工具只能由一个根目录开始相比更为灵活。由VAInstall
生成的安装程序允许先择不同的安装模式(graphic,text
或ansi)
。
Go To VAInstall
Java Service Wrapper
用于将Java Application
安装成为Window NT Service.
同时与之附带的scripts
能够很容易将Java Application
安装成为UNIX
的后台进程。
Go To Java Service Wrapper
Lift Off Java Installer
Lift Off Java Installer
的最大特色就是:自解压class
文件,对目标系统要求低以及跨平台性。
Go To Lift Off Java Installer
Toolshed
一个小巧、简单、纯Java
实现的安装程序制作工作。
Go To Toolshed
Launch4J
Lauch4J
也是一个Java
应用Window Exe
封装工具。通过Lauch4J
,可以提供splash screen,
图标,自动查询JRE
或内置JRE
等功能,同时还支持启动失败反馈以及命令行参数。
Go To Launch4J
AntInstaller
AntInstaller
是一个安装程序框架,它利用一个简单的XML
定义安装界面,并以Ant
执行安装过程。基于AntInstaller
的安装程序可以打包成自解压jar
通过command line
执行可Swing GUI
来执行。
Go To AntInstaller
Antigen
Antigen----
即Ant Installer Generator
。它主要的目的就是根据Ant
脚本创建图形化安装程序。
Go To Antigen
FreeInstaller
FreeInstaller
是一个开源项目,完全用Java
编写。它将应用程序打包成一个自解压的Java
应用。通过FreeInstaller
可以将Java
或非Java
的应用安装到UNIX,LINUX
以及window NT
系统中。
Go To FreeInstaller
Mini Installer
一个简单的Java
安装程序制作工具。整个制作过程是通过脚本完成的,最终生成一个可以通过双击方式执行的jar
文件。
Go To Mini Installer
通过对如上各产品的初步探索,本人最终选择了利用izpack + jsmooth
作为Java Web
应用产品的安装程序制作方案。选择这两种工具并不代表其它开源工具不好,只是本人自已结合自已项目的需求(
本人负责公司一企业应用开发平台的研发工作)
及本人的偏好作出的选择。
由于本人所在公司为商业公司,所以本文描述的方案并不是企业应用开发系统平台的实现模式,本文只是提供一个解决办法,关于如何与自已的框架或平台进行有效的整合,请读者自行考虑。
三.
环境准备:
你需要安装J2SDK1.4.1+
版本;关于J2SDK
请由Sun
公司下载;
你需要安装Ant1.6.2
版本,理论上其它版本也行,只是本人用的是1.6.2
;
请下载并安装izpack
;设定定装到IZPACK_HOME
请下载并安装jsmooth
;设定安装到JSMOOTH_HOME
四.
技术准备:
为了便于理解,你需要对Java
进行应用的开发有一定的基础,本例将以Web
应用的安装程序制作为背景进行相关介绍,所以需要你对Web
应用开发以及其发布方式有一定的基础;另外,本方案将会以Ant
作为应用build
的工具,所以你需要有一定的Ant
技术;对于如上相关知识本部分不准备介绍。下面本部分将主要对izpack
及jsmooth
进行简单的介绍。
4.1. jsmooth
:
4.1.1 Jsmooth
简介:
Jsmooth
,一个Java
可执行应用封装器(Wrapper)
,即将Java
可执行应用程序(
即可执行jar)
封装为Window
可执行文件------exe
文件的工具。
通过Jsmooth
将可执行jar
封装为Exe
文件,使得用户执行Java
应用就如同执行一般的Window
应用程序一样,重用用户经验。
Jsmooth
对jar
进行封装时可以设定classpath
,JVM
参数,命令行参数,JVM
版本及位置,这样用户在执行exe
时不用关心JVM,Classpath
等问题,这样就简化了Java
应用执行。
4.1.2
工作原理:
通过Jsmooth
生成的Window Exe
文件通常定义为“Jsmooth Application
”;
要想生成Jsmooth Application
,我们需要一个JsmoothGen
项目文件-----.jsmooth
文件,后面我们将其称为“.jsmooth
文件”;.jsmooth
文件实际上是一个xml
文件,用于描述/
定义Jsmooth Application
的相关属性,例如:classpath, JVM
,Java main
方法类,以及其它与Java
应用运行相关的各种设定等;通常你可以通过Jsmooth
提供的JsmoothGen.exe--------Windows Project Editor
来创建和编辑这个文件,这个Editor
如下图所示:
(
图-1)Widnow Project Editor
(
图-2)Widnow Project Editor
(
图-3)Widnow Project Editor
在.jsmooth
文件生成之后,就可以通过如下方式生成目标Jsmooth Application
,即Exe
文件:
(1)
。Window Project Editor
:
你可以直接在如上图所示的编辑器通过工具条来生成:Project
àCreate Exe
。
(2)
。Command Line
:
你也可以进入。jsmooth
文件所以目录,通过如下命令来生成目标Exe
文件:
………> %jsmooth_home%"jsmoothcmd.exe yourproject.jsmooth
(3)
。通过Ant
任务调用生成目标Exe
:
首先你需要在你的build
文件中加入jsmooth Ant
任务定义:
<>
classname="net.charabia.jsmoothgen.ant.JSmoothGen"
classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
然后,通过jsmoothgen
任务来执行生成Exe
的工作:
skeletonroot=”${jsmooth_home}/skeletons”/>
所以通过Jsmooth
我们可以很容易将Java Application
制作Windows Exe
应用。
关于Jsmooth
的详细介绍请参考[url]http://jsmooth.sourceforge.net[/url]
4.2. izpack
:
4.2.1. izpack
简介:
izpack
是基于Apache Software License 2.0
许可的开源项目;
izpack
是纯Java
,对部分特性有针对不同平台版本的Library
。例如:快捷键的创建。
izpack
是一个用于解决安装程序制作的Builder
工具;
通过izpack
制作的安装程序可以运行于不同的操作系统,Windows, Linux, Unix
等,只要安装了JDK1.4
以及其后版本即可;
izpack
优秀的模块化设计可以允许你定制安装程序外观、安装过程等;同时允许你通过其提供API
调整izpack
安装过程。
izpack
的主要功能包括(
但不限于)
:
・ XML based installation files
・ easy internationalization using XML files (10 translations are already available)
・ Ant integration, command-line compiler
・ easy customization with the panels and a rich API (even an XML parser is included !)
・ powerful variable substitution system that you can use to customize scripts and more generally any text-based file
・ different kinds of installers (standard, web-based, ...)
・ launching of external executables during the installation process and Unix executable flag support (useful for the scripts for instance)
・ layout of the installation files in packs (some can be optional)
・ native code integration facilities
・ jar files nesting support
・ ... more things to discover and create !.
(
图-4)IzPack
制作的安装界面示例-选择安装的Pack.
4.2.2.
原理及过程
利用izpack
制作安装程序的主要有两步:
第一步:创建并描述安装定义文件;
第二步:通过izpack
提供CommandLine
工具或Ant Task
对安装定义文件进行编译,编译的结果即是生成一个可执行的jar
文件,其中包括了整个安装过程的实现以及安装数据;
安装定义文件:
安装过程定义文件是一个XML
文件,installation
是根元素,表示定义的开始。定义主要由如下几部分组成:
1
.….
用于定义安装程序的基本信息;
产品中文名称
产品版本号,例如:1.0-062312
公司网址
JDK
版本号:1.4.2
2
.……
用于定义安装程序界面信息,例如:
3.……..
定义变量或配置信息,变量在整个安装制作的过程中非常重要,变量两种用途:其一:作为配置用,例如可以通过按照一定的命名称规则为某个变量设定一个值,izpack
在执行安装过程中将会读取某个变量的值来决定某个安装向导窗口是否可见等;例如:我们可以通过定义compareToVariable.
、compareToOperator.
与compareToValue.
的组合决定第个用户自定义的向导窗口在安装时是否可见,这样就可以通过上个窗口用户选择来决定下个窗口是否可见;其二:作为替换变量用,通常安装过程中收集的信息存放在变量中,然后,在安装程序进行到最后,利用变量的值来替换安装目标文件中的内容。
4. ….
决定,安装程序界面所支持的语言。
5. ……..
用于为安装界面指定图片或图标
用于指定用户自定义安装向导窗口定义XML
文件的位置
用于指定安装向导窗口中国际化资源XML
文件的位置
等等,例如:
<resources>
<res src="langsel.jpg" id="installer.langsel.img" />
<res src="readme.html" id="HTMLInfoPanel.info" parse="yes" type="plain" encoding="GB2312" />
<res src="readme_chn.html" id="HTMLInfoPanel.info_chn" parse="yes" type="plain" encoding="GB2312" />
<res src="license.html" id="HTMLLicencePanel.licence" parse="yes" type="plain" encoding="GB2312" />
<res src="license_chn.html" id="HTMLLicencePanel.licence_chn" parse="yes" type="plain" encoding="GB2312" />
<res src="shortcutSpec.xml" id="shortcutSpec.xml" parse="yes" type="xml" encoding="GB2312" />
<res src="Unix_shortcutSpec.xml" id="Unix_shortcutSpec.xml" parse="yes" type="xml" encoding="GB2312" />
<res src="packsLang.xml" id="packsLang.xml" />
<res src="packsLang_chn.xml" id="packsLang.xml_chn" />
<res src="UserInputSpec.xml" id="userInputSpec.xml" />
<res src="UserInputLang.xml" id="userInputLang.xml" />
<res src="UserInputLang_chn.xml" id="userInputLang.xml_chn" />
resources>
6. …….
本部分用于定义整个安装过程,每个panel
即是一个安装向导窗口,panel
是按顺序由IzPack
调用的。IzPack
内置了很多的Panel
,另外它还支持用户自定义的功能,主要是通过UserInputPanel
来实现的,你可以通过在……中定义的ID
为UserInputSpec.xml
的资源(XML)
中定义UserInputPanel
窗口中用户录入项目及相关存放的变量。另外,Izpack
支持条件用户自定义Panel,
即ConditionalUserInputPanel
,你可以在….
中通过变量来控制这样的向导窗口的可见性。当安装过程执行到InstallPanel
时IzPack
开始解压安装包到硬盘中,所以,一般来说所有的配置信息(
例如,安装目录,安装包的选择等)
都应在InstallPanel
之前完成。在InstallPanel
之后可以通过ShortcutPanel
来显示快捷方式创建窗口,另外还可以通过ProcessPanel
来执行一些后续操作。
<panels>
<panel classname="HTMLLicencePanel" />
<panel classname="HTMLInfoPanel" />
<panel classname="TargetPanel" />
<panel classname="PacksPanel" />
<panel classname="UserInputPanel" />
<panel classname="SummaryPanel" />
<panel classname="InstallPanel" />
<panel classname="ShortcutPanel" />
<panel classname="SimpleFinishPanel" />
panels>
7. …….
本部分主要用于定义安装包,即将哪些文件进行打包,以及将来安装时如何进行安装。通过可以将应用程序文件分解成不同的安装包,可以指定哪些pack
是必须安装的,哪些是可选的。
前边我们讲过,我们可以在中加入自定义向导窗口来允许用户指定一些配置,这些配置信息被存放到变量中,我们可以利用用户指定的值来替换应用程序中部分文件中的内容。那么在定义pack
时,就可以指定哪些文件在安装时需要进行解析(parseable)
。需要注意的,你需要指定需要解析的方式(xml, javaprop, plain,shell)
,如查将javaprop
类型的文件解析类型设定为plain
的话,可以就有问题,例如:如果变量的值为路径,那么在可能就会有问题。
另,对于每一个Pack
在它安装(copy
文件)
之后,可以定义它执行一个程序,例如脚本程序。你可以利用这种功能来做一些工作,例如:你可执行脚本程序来导入数据库数据等。
下面是一个示例:
<packs>
<pack id="ToolKit" name="ToolKit" required="yes">
…………
pack>
<pack id="Core" name="Core" required="yes">
<description>
在packsLang.xml
和packsLang.xml_chn
中描述了.description>
<fileset dir="app" targetdir="$INSTALL_PATH"app">
<include name="*" />
<include name="**" />
fileset>
<fileset dir="native" targetdir="$INSTALL_PATH"native">
<include name="*" />
<include name="**" />
fileset>
<file src="clear.db.splash.gif" targetdir="$INSTALL_PATH" />
<file src="init.db.splash.gif" targetdir="$INSTALL_PATH" />
<file src="installer.properties" targetdir="$INSTALL_PATH" />
<file src="installer.xml" targetdir="$INSTALL_PATH" />
<file src="installer.bat" targetdir="$INSTALL_PATH" />
<file src="uninstaller.bat" targetdir="$INSTALL_PATH" />
<parsable targetfile="$INSTALL_PATH/installer.properties"
type="javaprop" />