目录:
随着Java在应用产品开发中的广泛应用,基于Java的应用产品也就越来越多,那么如何为基于Java的应用产品制作安装程序的需求就产生了。以前人们一般都是使用InstallShield与InstallAnyWhere进行产品安装程序的制作,这是两个功能非常强大、易用的安装盘制作工具,尤其是InstallAnyWhere,它还支持Java应用产品安装制作,例如:大名鼎鼎的Jbuilder安装程序就是由它制作的。
本文并不准备对这些商业的安装制作工具进行讨论,本文将就如何利用开源的安装制作工具来进行Java Web应用产品程序制作进行一些探讨。
目前用于支持Java应用安装程序制作的开源工具非常丰富,本人将要本人在研究过程中所遇到的罗列一二以供参考:
Packlet
是一个简单的
Java
安装制作工具。它将
Java Application
打包成一个可以发布的类似于
zip
或
tgz
的压缩文件中。这个压缩文件被简为
packlet
,它可以在安装有
Java 2 Runtime Environment
的操作系统上执行
.
通过执行
packlet
将会给用户提供一个图形化的安装配置界面并解压应用。
|
IzPack
是一个用于
Java
平台的安装程序生成器。它用于产生一个轻量级、能运行于所有安装了
JVM
的任何的操作系统的安装程序。生成的安装程序可以通过双击或在
Command Line
通过
java –jar install.jar
命令进行启动,安装程序运行的方式具体将看操作系统的支持方式。
IzPack
的主要好处就是能够生成运行于任意操作系统的安装程序。
|
Jsmooth
可以将
Java
可执行应用
Wrapper
成
window
可执行
Exe
程序。通过
Jsmooth
生成的
Exe
程序会自动按制作时定义的顺序寻找合适的
JVM
,如果能不查找到
JVM
,安装程序会提示用户并能根据定义好的
URL
启动
Web Browser
让用户下载
JVM.
注意:
Jsmooth
并不是纯
Java
应用。
|
VAInsall
是一个用
Java
写的多平台安装程序工具。它是基于
GNU GPL2.0
许可。通过一个简单的配置文件,它允许安装程序打包工具由不同的目录下收集程序包,这与一般情况下安装程序制作工具只能由一个根目录开始相比更为灵活。由
VAInstall
生成的安装程序允许先择不同的安装模式
(graphic,text
或
ansi)
。
|
用于将
Java Application
安装成为
Window NT Service.
同时与之附带的
scripts
能够很容易将
Java Application
安装成为
UNIX
的后台进程。
|
Lift Off Java Installer
的最大特色就是:自解压
class
文件,对目标系统要求低以及跨平台性。
|
一个小巧、简单、纯
Java
实现的安装程序制作工作。
|
Lauch4J
也是一个
Java
应用
Window Exe
封装工具。通过
Lauch4J
,可以提供
splash screen,
图标,自动查询
JRE
或内置
JRE
等功能,同时还支持启动失败反馈以及命令行参数。
|
AntInstaller
是一个安装程序框架,它利用一个简单的
XML
定义安装界面,并以
Ant
执行安装过程。基于
AntInstaller
的安装程序可以打包成自解压
jar
通过
command line
执行可
Swing GUI
来执行。
|
Antigen----
即
Ant Installer Generator
。它主要的目的就是根据
Ant
脚本创建图形化安装程序。
|
FreeInstaller
是一个开源项目,完全用
Java
编写。它将应用程序打包成一个自解压的
Java
应用。通过
FreeInstaller
可以将
Java
或非
Java
的应用安装到
UNIX,LINUX
以及
window NT
系统中。
|
一个简单的
Java
安装程序制作工具。整个制作过程是通过脚本完成的,最终生成一个可以通过双击方式执行的
jar
文件。
|
通过对如上各产品的初步探索,本人最终选择了利用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.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 任务定义:
<taskdef name="jsmoothgen"classname="net.charabia.jsmoothgen.ant.JSmoothGen"classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
然后,通过jsmoothgen任务来执行生成Exe的工作:
<jsmoothgen project=”path/to/yourproject.jsmooth”
skeletonroot=”${jsmooth_home}/skeletons”/>
所以通过Jsmooth我们可以很容易将Java Application制作Windows Exe应用。
关于Jsmooth的详细介绍请参考
http://jsmooth.sourceforge.net
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.
利用izpack制作安装程序的主要有两步:
第一步:创建并描述安装定义文件;第二步:通过izpack提供CommandLine工具或Ant Task对安装定义文件进行编译,编译的结果即是生成一个可执行的jar文件,其中包括了整个安装过程的实现以及安装数据;
- 安装定义文件:
安装过程定义文件是一个XML文件,installation是根元素,表示定义的开始。定义主要由如下几部分组成:
1.<info>….</info>
用于定义安装程序的基本信息;
<info>
<appname>产品中文名称</appname>
<appversion>产品版本号,例如:1.0-062312</appversion>
<url>公司网址</url>
<javaversion>JDK版本号:1.4.2</javaversion>
</info>
|
2.<guiprefs>……</guipref>
用于定义安装程序界面信息,例如:
<!--**安装界面配置信息**-->
<guiprefs resizable="no" height="480" width="600">
<modifier key="langDisplayType" value="native" />
</guiprefs>
|
3.<variables>……..</variables>
定义变量或配置信息,变量在整个安装制作的过程中非常重要,变量两种用途:其一:作为配置用,例如可以通过按照一定的命名称规则为某个变量设定一个值,izpack在执行安装过程中将会读取某个变量的值来决定某个安装向导窗口是否可见等;例如:我们可以通过定义compareToVariable.<index>、compareToOperator.<index>与compareToValue.<index>的组合决定第<index>个用户自定义的向导窗口在安装时是否可见,这样就可以通过上个窗口用户选择来决定下个窗口是否可见;其二:作为替换变量用,通常安装过程中收集的信息存放在变量中,然后,在安装程序进行到最后,利用变量的值来替换安装目标文件中的内容。
<variables>
<!--**显示快捷键创建窗口标识**-->
<variable name="DesktopShortcutCheckboxEnabled" value="true" />
<!--**设定部分变量的缺省值**-->
<variable name="SERVER_TYPE" value="tomcat" />
<variable name="SERVER_PATH" value="" />
<!--**TOMCAT PORT输入窗口(index=1)判定**-->
<variable name="compareToVariable.1" value="INSTALL_TYPE" />
<variable name="compareToOperator.1" value="=" />
<variable name="compareToValue.1" value="new" />
</variable>
|
4. <locale>….</locale>
决定,安装程序界面所支持的语言。
<!--**安装界面语言定义**-->
<locale>
<langpack iso3="chn" />
<langpack iso3="eng" />
</locale>
|
5. <resources>……..</resources>
用于为安装界面指定图片或图标
用于指定用户自定义安装向导窗口定义XML文件的位置
用于指定安装向导窗口中国际化资源XML文件的位置
等等,例如:
<!--**
安装界面资源定义
**-->
<
resources
>
<!--**XX
安装语言选择窗口图片
**-->
<
res
src
=
"langsel.jpg"
id
=
"installer.langsel.img"
/>
<!--**XX
安装说明文件
**-->
<
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"
/>
<!--**XX
产品版本说明文件
**-->
<
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"
/>
<!--**Pack Lang**-->
<
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.<panels> ……. </panels>
本部分用于定义整个安装过程,每个panel即是一个安装向导窗口,panel是按顺序由IzPack调用的。IzPack内置了很多的Panel,另外它还支持用户自定义的功能,主要是通过UserInputPanel来实现的,你可以通过在<resources>……</resources>中定义的ID为UserInputSpec.xml的资源(XML)中定义UserInputPanel窗口中用户录入项目及相关存放的变量。另外,Izpack支持条件用户自定义Panel,即ConditionalUserInputPanel,你可以在<variables>….</variables>中通过变量来控制这样的向导窗口的可见性。当安装过程执行到InstallPanel时IzPack开始解压安装包到硬盘中,所以,一般来说所有的配置信息(例如,安装目录,安装包的选择等)都应在InstallPanel之前完成。在InstallPanel之后可以通过ShortcutPanel来显示快捷方式创建窗口,另外还可以通过ProcessPanel来执行一些后续操作。
<!--**
安装界面定义
**-->
<
panels
>
<!--**
显示公司版权信息
**-->
<
panel
classname
=
"HTMLLicencePanel"
/>
<!--**
显示
ReadMe
信息
**-->
<
panel
classname
=
"HTMLInfoPanel"
/>
<!--**
选择安装目标
**-->
<
panel
classname
=
"TargetPanel"
/>
<!--**
选择安装内容
**-->
<
panel
classname
=
"PacksPanel"
/>
<!--**INSTALL_PATH**-->
<!--**
选择安装类型
:
安装到已有应用服务器中
安装
TOMCAT
作为应用服务器
.**-->
<
panel
classname
=
"UserInputPanel"
/>
<!--**INSTALL_TYPE:new|old**-->
<!--**
显示用户安装输入配置
**-->
<
panel
classname
=
"SummaryPanel"
/>
<!--**
开始安装
**-->
<
panel
classname
=
"InstallPanel"
/>
<!--**
显示快捷键创建窗口
**-->
<
panel
classname
=
"ShortcutPanel"
/>
<!--**
显示安装完成窗口
**-->
<
panel
classname
=
"SimpleFinishPanel"
/>
</
panels
>
|
7. <packs> ……. </packs>
本部分主要用于定义安装包,即将哪些文件进行打包,以及将来安装时如何进行安装。通过<pack>可以将应用程序文件分解成不同的安装包,可以指定哪些pack是必须安装的,哪些是可选的。
前边我们讲过,我们可以在<panels>中加入自定义向导窗口来允许用户指定一些配置,这些配置信息被存放到变量中,我们可以利用用户指定的值来替换应用程序中部分文件中的内容。那么在定义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"
/>
<
parsable
targetfile
=
"$INSTALL_PATH/installer.bat"
type
=
"plain"
/>
<
parsable
targetfile
=
"$INSTALL_PATH/uninstaller.bat"
type
=
"plain"
/>
<
executable
targetfile
=
"$INSTALL_PATH/installer.bat"
stage
=
"postinstall"
keep
=
"false"
failure
=
"abort"
>
<
os
family
=
"windows"
/>
</
executable
>
<
executable
targetfile
=
"$INSTALL_PATH/uninstaller.bat"
stage
=
"uninstall"
keep
=
"true"
failure
=
"abort"
>
<
os
family
=
"windows"
/>
</
executable
>
</
pack
>
</
packs
>
|
8. jar & native & 其它:
另外,你的安装程序在安装过程中可能会需要其它的Java包来完成一些工作,例如,你在自定义向导窗口中做了用户输入的数据库连接有效性检查,如果你是通过创建 JDBC连接来做的话,你就需要JDBC driver的jar,那么你就需要通过<jar />来加入这些jar包。例如:
<!--**
安装程序所需要的其它
Jar
文件夹
**-->
<
jar
src
=
"dbdrivers/mssqlserver.jar"
stage
=
"both"
/>
<
jar
src
=
"dbdrivers/msutil.jar"
stage
=
"both"
/>
<
jar
src
=
"dbdrivers/msbase.jar"
stage
=
"both"
/>
<
jar
src
=
"dbdrivers/ojdbc14.jar"
stage
=
"both"
/>
<
jar
src
=
"dbdrivers/orai18n.jar"
stage
=
"both"
/>
|
还有,如果你的安装程序在安装过程中需要调用native应用的话,例如:你的安装程序界面中通过Java JNI访问机器硬件的话,你就需要JNI的动态库加入到安装程序中。例如:
<!--**
安装程序所需要的
Native
文件
**-->
<
native
type
=
"izpack"
name
=
"ShellLink.dll"
/>
|
基本上来说,一个应用安装定义文件由如上内容就可以了。当然为了能够制作出功能强大的安装程序,你可能需要定制IzPack,包括通过API以及扩展其现有功能,你需要认真深入了解IzPack.
关于安装定义文件的具体详细说明请参考IzPack参考手册,其中有非常详细的说明。它是整个安装程序制作的核心。功能非常强大,非常灵活。
-
编译:
一但,安装定义文件准备好了之后,你就可以利用IzPack对其进行编译了,编译的结果就是生成一个可执行的jar文件,一般可命名为installer.jar文件。
当然了,在进行编译之前,你需要根据安装定义文件来组织目录并将相关的应用文件放到相应的目录下。IzPack对于这些没有什么特别的要求,一般情况下,你可以将需要安装的文件放到一个目录下,在目录下按照目标安装结构进行组织文件即可。将安装定义文件放到根目录下。
在文件组织好之后,即可进行编译了。
有两种方式进行编译:
(1). Command Line 方式:
……> %IzPack_home%/bin/compiler.bat <
安装定义文件>
即进入上面准备好的目录下, 通过IzPack提供的compiler.bat来执行即可。
(2). Ant方式:
首先,在Ant Build文件中加入IzPack任务定义:
<taskdefname="izpack"
classpath="${izpack.dir}/lib/compiler.jar"
classname="com.izforge.izpack.ant.IzPackTask"/>
然后,调用izpack任务即可:
<izpackinput="${安装定义XML文件}"output="${installer.jar}"basedir="${上面准备好的目录根目录}"izPackDir="${izpack安装目录}"installerType="standard"compression="bzip2"compressionlevel="9"/>
通过如上任何一种方式都可以生成安装程序――――一个可执行的jar文件。
所以通过IzPack我们可以很容易将制作应用安装程序。
关于IzPack的详细介绍请参考
http://www.izforge.com/izpack/
到目前为止,我们介紹了一些开源的与安装制作相关的工具,同时对Jsmooth与IzPack安装程序制作方式与过程做了一定的讲解。随后我们将会利用IzPack与Jsmooth给出一个Web应用安装盘制作的过程。
本部分就利用IzPack+Jsmooth为一个Web应用制作安装程序
待续。。。。。。
待续。。。。。。