标题：IzPack
简介
IzPack 是一个 Java 安装程序制作工具，能够制作一些简单的安装程序。制作出来的安装程序能在 Unix-like, MacOS X, Windows 等系统平台上运行。[1]
主要功能
Ant集成、命令行编译器
·容易定制与面板和丰富的API(甚至是一个XML解析器是包括!)
·强大的变量替代系统,您可以使用自定义脚本和更一般的任何基于文本的文件
·不同种类的安装程序(标准的、基于web的,……)
·开展对外可执行文件在安装过程中,Unix可执行标记支持(有用的脚本实例)
·布局的安装文件的包(一些是可选的)
·本机代码集成设施
·jar文件嵌套的支持
安装实例
<!--**安装包的定义**-->
<!--**安装及运行辅助工具包.**-->
…………
</pack>
<!--**核心安装包**-->
<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" />
type="javaprop" /> 
<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>
检查工作
另外，你的安装程序在安装过程中可能会需要其它的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对其进行编译了，编译的结果就是生成一个可执行的jar文件，一般可命名为install.jar文件。 
当然了，在进行编译之前，你需要根据安装定义文件来组织目录并将相关的应用文件放到相应的目录下。IzPack对于这些没有什么特别的要求，一般情况下，你可以将需要安装的文件放到一个目录下，在目录下按照目标安装结构进行组织文件即可。将安装定义文件放到根目录下。 
在文件组织好之后，即可进行编译了。 
有两种方式进行编译： 
(1). Command Line 方式：
……> $ ..\bin\compile install.xml -b . -o install.jar -k standard 
$为上面准备好的目录，例如D:\IzPack\sample ..\bin\compile install.xml -b . -o install.jar -k standard
通过IzPack提供的compile.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"/>　
使用技巧
利用izpack制作安装程序的主要有两步：
第一步：创建并描述安装定义文件；
第二步：通过izpack提供CommandLine工具或Ant Task对安装定义文件进行编译，编译的结果即是生成一个可执行的jar文件，其中包括了整个安装过程的实现以及安装数据；
安装定义文件： 
安装过程定义文件是一个XML文件，installation是根元素，表示定义的开始。定义主要由如下几部分组成：
1．<info>….</info>
用于定义安装程序的基本信息；
<info>
<appname>产品中文名称</appname>
<appversion>产品版本号，例如：1.0-062312</appversion>
<url>公司网址</url>
<javaversion>JDK版本号：1.</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>
本部分用于定义整个安装过程，每个panel即是一个安装向导窗口，panel是按顺序由IzPack调用的。IzPack内置了很多的Panel，另外它还支持用户自定义的功能，主要是通过UserInputPanel来实现的，你可以通过在<resources>……</resources>中定义的ID为UserInputSpec.xml的资源(XML)中定义UserInputPanel窗口中用户录入项目及相关存放的变量。另外，Izpack支持条件用户自定义Panel,即ConditionalUserInputPanel，你可以在<variables>….</variables>中通过变量来控制这样的向导窗口的可见性。当安装过程执行到InstallPanel时IzPack开始解压安装包到硬盘中，所以，一般来说所有的配置信息(例如，安装目录，安装包的选择等)都应在InstallPanel之前完成。在InstallPanel之后可以通过ShortcutPanel来显示快捷方式创建窗口，另外还可以通过ProcessPanel来执行一些后续操作。
<!--**安装界面定义**-->
<!--**显示公司版权信息**-->
<!--**显示ReadMe信息**-->
<!--**选择安装目标**-->
<!--**选择安装内容**-->
<!--**INSTALL_PATH**-->
<!--**选择安装类型:安装到已有应用服务器中安装TOMCAT作为应用服务器.**-->
<!--**INSTALL_TYPE:new|old**--> 
<!--**显示用户安装输入配置**-->
<!--**开始安装**-->
<!--**显示快捷键创建窗口**-->
<!--**显示安装完成窗口**-->
</panels> 
7. ……. </packs>
本部分主要用于定义安装包，即将哪些文件进行打包，以及将来安装时如何进行安装。通过可以将应用程序文件分解成不同的安装包，可以指定哪些pack是必须安装的，哪些是可选的。
前边我们讲过，我们可以在中加入自定义向导窗口来允许用户指定一些配置，这些配置信息被存放到变量中，我们可以利用用户指定的值来替换应用程序中部分文件中的内容。那么在定义pack时，就可以指定哪些文件在安装时需要进行解析(parseable)。需要注意的，你需要指定需要解析的方式(xml, javaprop, plain,shell)，如查将javaprop类型的文件解析类型设定为plain的话，可能就有问题，例如：如果变量的值为路径，那么可能就会有问题。
另，对于每一个Pack在它安装(copy文件)之后，可以定义它执行一个程序，例如脚本程序。你可以利用这种功能来做一些工作，例如：你可执行脚本程序来导入数据库数据等。