izpack是一個用於解決安裝程序製作的Builder工具

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 !.

2.原理及過程

利用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> ……. </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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章