制作Java安裝程序
http://zeroliu.blogdriver.com/zeroliu/1183916.html
這個工具利用 ANT 來制作在 Windows, MacOS X, Unix 平臺上可執(zhí)行的文件,比如 exe,zip,jar。ROXES ANT Tasks 基于 GPL 發(fā)布。
http://www.roxes.com/produkte/rat.html
企業(yè)開源參考架構(gòu)
Java Web應用產(chǎn)品安裝程序制作方案
目錄:
一.背景
二.開源工具
三.環(huán)境準備
四.技術(shù)準備
4.1. Jsmooth
4.1.1. Jsmooth簡介
4.1.2.工作原理
4.2. IzPack
4.2.1.IzPack簡介
4.2.2.工作原理
五.方案實例
六.結(jié)束
一. 背景:
隨著Java在應用產(chǎn)品開發(fā)中的廣泛應用,基于Java的應用產(chǎn)品也就越來越多,那么如何為基于Java的應用產(chǎn)品制作安裝程序的需求就產(chǎn)生了。以前人們一般都是使用InstallShield與InstallAnyWhere進行產(chǎn)品安裝程序的制作,這是兩個功能非常強大、易用的安裝盤制作工具,尤其是InstallAnyWhere,它還支持Java應用產(chǎn)品安裝制作,例如:大名鼎鼎的Jbuilder安裝程序就是由它制作的。
本文并不準備對這些商業(yè)的安裝制作工具進行討論,本文將就如何利用開源的安裝制作工具來進行Java Web應用產(chǎn)品程序制作進行一些探討。
二. 開源工具:
目前用于支持Java應用安裝程序制作的開源工具非常豐富,本人將要本人在研究過程中所遇到的羅列一二以供參考:
Packlet
Packlet是一個簡單的Java安裝制作工具。它將Java Application打包成一個可以發(fā)布的類似于zip或tgz的壓縮文件中。這個壓縮文件被簡為packlet,它可以在安裝有Java 2 Runtime Environment的操作系統(tǒng)上執(zhí)行. 通過執(zhí)行packlet將會給用戶提供一個圖形化的安裝配置界面并解壓應用。
Go To Packlet
IzPack
IzPack是一個用于Java平臺的安裝程序生成器。它用于產(chǎn)生一個輕量級、能運行于所有安裝了JVM的任何的操作系統(tǒng)的安裝程序。生成的安裝程序可以通過雙擊或在Command Line通過java –jar install.jar命令進行啟動,安裝程序運行的方式具體將看操作系統(tǒng)的支持方式。IzPack的主要好處就是能夠生成運行于任意操作系統(tǒng)的安裝程序。
Go To IzPack
JSmooth
Jsmooth可以將Java可執(zhí)行應用Wrapper成window可執(zhí)行Exe程序。通過Jsmooth生成的Exe程序會自動按制作時定義的順序?qū)ふ液线m的JVM,如果能不查找到JVM,安裝程序會提示用戶并能根據(jù)定義好的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 文件,對目標系統(tǒng)要求低以及跨平臺性。
Go To Lift Off Java Installer
Toolshed
一個小巧、簡單、純Java實現(xiàn)的安裝程序制作工作。
Go To Toolshed
Launch4J
Lauch4J也是一個Java應用Window Exe封裝工具。通過Lauch4J,可以提供splash screen, 圖標,自動查詢JRE或內(nèi)置JRE等功能,同時還支持啟動失敗反饋以及命令行參數(shù)。
Go To Launch4J
AntInstaller
AntInstaller是一個安裝程序框架,它利用一個簡單的XML定義安裝界面,并以Ant執(zhí)行安裝過程。基于AntInstaller的安裝程序可以打包成自解壓jar通過command line執(zhí)行可Swing GUI來執(zhí)行。
Go To AntInstaller
Antigen
Antigen----即Ant Installer Generator。它主要的目的就是根據(jù)Ant腳本創(chuàng)建圖形化安裝程序。
Go To Antigen
FreeInstaller
FreeInstaller是一個開源項目,完全用Java編寫。它將應用程序打包成一個自解壓的Java應用。通過FreeInstaller可以將Java或非Java的應用安裝到UNIX,LINUX以及window NT系統(tǒng)中。
Go To FreeInstaller
Mini Installer
一個簡單的Java安裝程序制作工具。整個制作過程是通過腳本完成的,最終生成一個可以通過雙擊方式執(zhí)行的jar文件。
Go To Mini Installer
通過對如上各產(chǎn)品的初步探索,本人最終選擇了利用izpack + jsmooth作為Java Web應用產(chǎn)品的安裝程序制作方案。選擇這兩種工具并不代表其它開源工具不好,只是本人自已結(jié)合自已項目的需求(本人負責公司一企業(yè)應用開發(fā)平臺的研發(fā)工作)及本人的偏好作出的選擇。
由于本人所在公司為商業(yè)公司,所以本文描述的方案并不是企業(yè)應用開發(fā)系統(tǒng)平臺的實現(xiàn)模式,本文只是提供一個解決辦法,關(guān)于如何與自已的框架或平臺進行有效的整合,請讀者自行考慮。
三. 環(huán)境準備:
你需要安裝J2SDK1.4.1+版本;關(guān)于J2SDK請由Sun公司下載;
你需要安裝Ant1.6.2版本,理論上其它版本也行,只是本人用的是1.6.2;
請下載并安裝izpack;設定定裝到IZPACK_HOME
請下載并安裝jsmooth;設定安裝到JSMOOTH_HOME
四. 技術(shù)準備:
為了便于理解,你需要對Java進行應用的開發(fā)有一定的基礎(chǔ),本例將以Web應用的安裝程序制作為背景進行相關(guān)介紹,所以需要你對Web 應用開發(fā)以及其發(fā)布方式有一定的基礎(chǔ);另外,本方案將會以Ant作為應用build的工具,所以你需要有一定的Ant技術(shù);對于如上相關(guān)知識本部分不準備介紹。下面本部分將主要對izpack及jsmooth進行簡單的介紹。
4.1. jsmooth:
4.1.1 Jsmooth 簡介:
Jsmooth,一個Java可執(zhí)行應用封裝器(Wrapper),即將Java可執(zhí)行應用程序(即可執(zhí)行jar)封裝為Window可執(zhí)行文件------exe文件的工具。
通過Jsmooth將可執(zhí)行jar封裝為Exe文件,使得用戶執(zhí)行Java應用就如同執(zhí)行一般的Window應用程序一樣,重用用戶經(jīng)驗。
Jsmooth對jar進行封裝時可以設定classpath,JVM參數(shù),命令行參數(shù),JVM版本及位置,這樣用戶在執(zhí)行exe時不用關(guān)心JVM,Classpath等問題,這樣就簡化了Java應用執(zhí)行。
4.1.2 工作原理:
通過Jsmooth生成的Window Exe文件通常定義為“Jsmooth Application”;
要想生成Jsmooth Application,我們需要一個JsmoothGen 項目文件-----.jsmooth文件,后面我們將其稱為“.jsmooth文件”;.jsmooth文件實際上是一個xml文件,用于描述/定義Jsmooth Application的相關(guān)屬性,例如:classpath, JVM,Java main方法類,以及其它與Java應用運行相關(guān)的各種設定等;通常你可以通過Jsmooth提供的JsmoothGen.exe--------Windows Project Editor來創(chuàng)建和編輯這個文件,這個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任務調(diào)用生成目標Exe:
首先你需要在你的build文件中加入jsmooth Ant 任務定義:
<>
classname="net.charabia.jsmoothgen.ant.JSmoothGen"
classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
然后,通過jsmoothgen任務來執(zhí)行生成Exe的工作:
skeletonroot=”${jsmooth_home}/skeletons”/>
所以通過Jsmooth我們可以很容易將Java Application制作Windows Exe應用。
關(guān)于Jsmooth的詳細介紹請參考http://jsmooth.sourceforge.net
4.2. izpack:
4.2.1. izpack簡介:
izpack是基于Apache Software License 2.0許可的開源項目;
izpack是純Java,對部分特性有針對不同平臺版本的Library。例如:快捷鍵的創(chuàng)建。
izpack是一個用于解決安裝程序制作的Builder工具;
通過izpack制作的安裝程序可以運行于不同的操作系統(tǒng),Windows, Linux, Unix等,只要安裝了JDK1.4以及其后版本即可;
izpack優(yōu)秀的模塊化設計可以允許你定制安裝程序外觀、安裝過程等;同時允許你通過其提供API調(diào)整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制作安裝程序的主要有兩步:
第一步:創(chuàng)建并描述安裝定義文件;
第二步:通過izpack提供CommandLine工具或Ant Task對安裝定義文件進行編譯,編譯的結(jié)果即是生成一個可執(zhí)行的jar文件,其中包括了整個安裝過程的實現(xiàn)以及安裝數(shù)據(jù);
安裝定義文件:
安裝過程定義文件是一個XML文件,installation是根元素,表示定義的開始。定義主要由如下幾部分組成:
1.….
用于定義安裝程序的基本信息;
產(chǎn)品中文名稱
產(chǎn)品版本號,例如:1.0-062312
公司網(wǎng)址
JDK版本號:1.4.2
2.……
用于定義安裝程序界面信息,例如:
3.……..
定義變量或配置信息,變量在整個安裝制作的過程中非常重要,變量兩種用途:其一:作為配置用,例如可以通過按照一定的命名稱規(guī)則為某個變量設定一個值,izpack在執(zhí)行安裝過程中將會讀取某個變量的值來決定某個安裝向?qū)Т翱谑欠窨梢姷龋焕纾何覀兛梢酝ㄟ^定義compareToVariable.、compareToOperator.與compareToValue.的組合決定第個用戶自定義的向?qū)Т翱谠诎惭b時是否可見,這樣就可以通過上個窗口用戶選擇來決定下個窗口是否可見;其二:作為替換變量用,通常安裝過程中收集的信息存放在變量中,然后,在安裝程序進行到最后,利用變量的值來替換安裝目標文件中的內(nèi)容。
4. ….
決定,安裝程序界面所支持的語言。
5. ……..
用于為安裝界面指定圖片或圖標
用于指定用戶自定義安裝向?qū)Т翱诙xXML文件的位置
用于指定安裝向?qū)Т翱谥袊H化資源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即是一個安裝向?qū)Т翱冢?/span>panel是按順序由IzPack調(diào)用的。IzPack內(nèi)置了很多的Panel,另外它還支持用戶自定義的功能,主要是通過UserInputPanel來實現(xiàn)的,你可以通過在……中定義的ID為UserInputSpec.xml的資源(XML)中定義UserInputPanel窗口中用戶錄入項目及相關(guān)存放的變量。另外,Izpack支持條件用戶自定義Panel,即ConditionalUserInputPanel,你可以在….中通過變量來控制這樣的向?qū)Т翱诘目梢娦浴.敯惭b過程執(zhí)行到InstallPanel時IzPack開始解壓安裝包到硬盤中,所以,一般來說所有的配置信息(例如,安裝目錄,安裝包的選擇等)都應在InstallPanel之前完成。在InstallPanel之后可以通過ShortcutPanel來顯示快捷方式創(chuàng)建窗口,另外還可以通過ProcessPanel來執(zhí)行一些后續(xù)操作。
<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是必須安裝的,哪些是可選的。
前邊我們講過,我們可以在中加入自定義向?qū)Т翱趤碓试S用戶指定一些配置,這些配置信息被存放到變量中,我們可以利用用戶指定的值來替換應用程序中部分文件中的內(nèi)容。那么在定義pack時,就可以指定哪些文件在安裝時需要進行解析(parseable)。需要注意的,你需要指定需要解析的方式(xml, javaprop, plain,shell),如查將javaprop類型的文件解析類型設定為plain的話,可以就有問題,例如:如果變量的值為路徑,那么在可能就會有問題。
另,對于每一個Pack在它安裝(copy文件)之后,可以定義它執(zhí)行一個程序,例如腳本程序。你可以利用這種功能來做一些工作,例如:你可執(zhí)行腳本程序來導入數(shù)據(jù)庫數(shù)據(jù)等。
下面是一個示例:
<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" />
&