RT 高分求 IZPACK 打包程序 教程, 包括如何自定义pannel, 全部pannel 自定义的
解决方案 »
- Java写入中文到文件出现乱码,如何解决?
- java的一个简单秒表程序,运行时为什么比系统时钟慢?
- Java从JVM拖到本地系统拖拽实现
- 鼠标拖动按钮时老是出现异常
- JATBLE排序后 VIEW和MODEL不一致
- eclipse连接sql2005的问题
- JList中加入JCheckBox控件时按住CTRL键时可以多选,但如何实现不用按CTRL键就可多选?谢谢。
- 再提供30分,寻求答案!!(共计130分)
- 那位能解释一下回调机制(Callbacks)的原理,谢谢!
- 谁有在一个class中包含有多个sql语句的例子(最好操作涉及2个以上的表)
- Serializable这个接口起啥作用啊??
- java 加载jdbc出现not found异常,求解决!急!!!!!!
IzPack打包工具是通过一个个的panel控制去实现的,在这里我们可以根据安装过程的选择控制panel的选择。如:
<panel classname="UserInputPanel" id="trailPanel" condition="licenseType.trail"/>
<panel classname="UserInputPanel" id="formalPanel" condition="licenseType.formal"/>
当condition="licenseType.trail"时显示 trailPanel,当condition="licenseType.formal"时显示formalPanel.
在这里必须在<conditions></conditions>标签下定义上面的condition.
<!-- define condition -->
<conditions>
<condition id="licenseType.trail" type="variable">
<name>licenseType</name>
<value>trail</value>
</condition>
<condition id="licenseType.formal" type="variable">
<name>licenseType</name>
<value>formal</value>
</condition>
</conditions>
同时定义使用的变量
<!-- define variables -->
<variables>
<variable name="licenseType" value=""/>
</variables>
Processpanel介绍
IzPack允许用户在安装完成后执行自己的文件或.class对系统进行配置。在这里只要在InstallPanel之后使用ProcessPanel即可。例如:
......
<panel classname="InstallPanel"/>
<panel classname="ProcessPanel"/>
<panel classname="ShortcutPanel"/>
.....
同时需要在resources标签下引用指定的资源文件。
......
<res id="ProcessPanel.Spec.xml" src="ProcessPanel.Spec.xml"/>
<res id="shortcutSpec.xml" src="EasyTrack_ShortcutSpec.xml" />
......
在自己ProcessPanel.Spec.xml写编写自己需要的执行的job。
IzPack允许用户执行自己的.class,只需在java文件中包含public void run( AbstractUIProcessHandler handler, String[] args)方法即可。
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" />
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>
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>
Packs
本部分主要用于定义安装包,即将哪些文件进行打包,以及将来安装时如何进行安装。通过可以将应用程序文件分解成不同的安装包,可以指定哪些pack是必须安装的,哪些是可选的。
前边我们讲过,我们可以在中加入自定义向导窗口来允许用户指定一些配置,这些配置信息被存放到变量中,我们可以利用用户指定的值来替换应用程序中部分文件中的内容。那么在定义pack时,就可以指定哪些文件在安装时需要进行解析(parseable)。需要注意的,你需要指定需要解析的方式(xml, javaprop, plain,shell),如查将javaprop类型的文件解析类型设定为plain的话,可能就有问题,例如:如果变量的值为路径,那么可能就会有问题。
另,对于每一个Pack在它安装(copy文件)之后,可以定义它执行一个程序,例如脚本程序。你可以利用这种功能来做一些工作,例如:你可执行脚本程序来导入数据库数据等。
下面是一个示例:
<!--**安装包的定义**-->
<!--**安装及运行辅助工具包.**-->
…………
</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>
定义变量或配置信息,变量在整个安装制作的过程中非常重要,变量两种用途:其一:作为配置用,例如可以通过按照一定的命名称规则为某个变量设定一个值,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>
快捷方式
需要注意三个地方
1、 定义变量
<variables>
<variable name="DesktopShortcutCheckboxEnabled" value="true"/>
<variable name="ApplicationShortcutPath" value="ApplicationShortcuts"/>
</variables>
2、在panel中
<panel classname="ShortcutPanel" id="shortcutpanel"/>
pack中(这个好像不是必须的,只需要有变量在i18n文件夹下的文件里即可)
必须有一个pack的name=Core或name=Legal或name=Doc
进程批处理
需要注意
在panel中,在installPanel后添加ProcessPanel
<panel classname="InstallPanel"/>
<panel classname="ProcessPanel"/>
在resources中添加
<res id="ProcessPanel.Spec.xml" src="ProcessPanel.Spec.xml"/>
在ProcessPanel.Spec.xml中增加
<job name="install database">
<os family="windows" />
<executefile name="$INSTALL_PATH/install_db.bat" >
<arg>$INSTALL_PATH</arg>
</executefile>
</job>
$INSTALL_PATH为安装路径
其中arg给批处理文件传递命令,在批处理文件中,以“%1”接收变量
Pack批处理
需要注意
在pack中增加
<executable type="bin" targetfile="$INSTALL_PATH/test.bat" stage="never" keep="true" failure="abort">
<os family="windows" />
</executable>
Type=bin表明是DOS处理
Targetfile 批处理文件路径及名称
Keep true处理后保存,false处理后删除批处理文件
Family 表明系统环境
Panel-input-type
check box
<field type="check" variable="checkRunSelection">
<description align="left" txt="select run system or not run system"
id="select run system or not run system"/>
<spec txt="run system at moment" id="run system at moment" true="on" false="off" set="true"/>
</field>
variable="checkRunSelection",变量名称,唯一性
Type=check
True=”on”,true所对应的值
False=”off”,false所对应的值
Set=”true”,选中,set=”false”,不选择
Description.id显示在面板上的说明文字
Spec.id显示在面板上的文字
text
增加panel
在com.izforge.izpack.panels包中增加HiPanel类extend IzPanel类在com.izforge.izpack.panels包中增加HiPanelConsoleHelper类 extends PanelConsoleHelper implements PanelConsole修改ant编译文件build.xml
在<target name="build.panels" depends="build.installer">中增加
<build-panel name="HiPanel">
<include name="com/izforge/izpack/panels/HiPanel.java"/>
<include name="com/izforge/izpack/panels/HiPanelConsoleHelper.java" />
</build-panel>
在<build-panel name="CheckedHelloPanel">中增加
<include name="com/izforge/izpack/panels/HiPanel.java"/>
编辑build.xml修改完成按钮,给完成按钮增加事件
修改源码
com.izforge.izpack.installer包中InstallerFrame类的exit()方法中第一个if语句中增加
String checkRunSelection = installdata.getVariable("checkRunSelection");
String systemRunExeFile = installdata.getVariable("systemRunExeFile");
String installPath = installdata.getInstallPath();
String url = installPath + systemRunExeFile + "\\startup.bat";
try{
if("on".equals(checkRunSelection)){
Runtime rt=Runtime.getRuntime();
Process p=null;
p=rt.exec(url);
}
}catch(Exception e){
System.out.println(e.getMessage());
}
说明:
考虑到实际项目的情况,需要根据需求修改代码。由于代码不是很复杂,建议在这里进行。
还有一种方式,不过不是很好,(效果不是很明显:在不点击完成的时候已经启动服务了),就是在userInputPanel面板中点击下一步的时候设置validator,这时可以运行java代码启动服务。
修改源码
com.izforge.izpack.installer包中InstallerFrame类的exit()方法中第一个if语句中增加
/*安装完成后的操作*/
SystemInstallFinishAction systemInstallFinishAction = new SystemInstallFinishAction();
systemInstallFinishAction.run();
在包com.izforge.izpack.util下新增SystemInstallFinishAction类
实现run方法
在run方法中进行action操作
UserInputPanel面板的国际化
修改i18n文件夹下的文件,每个文件都需要修改
修改\bin\langpacks\installer文件下的文件
Validator验证
注意事项:
在panel面板中增加
<validator classname="com.izforge.izpack.util.SystemInstallFinishValidator" />
Classname为进行验证的类
增加类SystemInstallFinishValidator实现DataValidator
定义类的方法
public boolean getDefaultAnswer() {
return true;
} public String getErrorMessageId() {
return "Can not connect to SQLServer, please check your database.";
} public String getWarningMessageId() {
return "Can not connect to SQLServer, please check your database.";;
} public Status validateData(AutomatedInstallData arg) {
return Status.OK;
return Status. WARNING;
return Status.ERROR;
}
若返回OK,直接转向下一个panel
若返回ERROR,停留在本页面
若返回WARNING,在提示窗体中点击“确定”转向下一panel,点击“取消”停留在本页面。
注意,在点击WARNING时,若getWarningMessageId返回的是null值,则等同于ERROR。
官网上应该有文档吧?