hengheng123456789

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
           

          制作Java安裝程序

          http://zeroliu.blogdriver.com/zeroliu/1183916.html

          這個工具利用 ANT 來制作在 Windows, MacOS X, Unix 平臺上可執(zhí)行的文件,比如 exezipjarROXES ANT Tasks 基于 GPL 發(fā)布。 

           http://www.roxes.com/produkte/rat.html

           企業(yè)開源參考架構(gòu)

          Java Web應(yīng)用產(chǎn)品安裝程序制作方案

          目錄:

          一.背景

          二.開源工具

          三.環(huán)境準(zhǔn)備

          四.技術(shù)準(zhǔn)備

          4.1. Jsmooth

          4.1.1. Jsmooth簡介

          4.1.2.工作原理

          4.2. IzPack

          4.2.1.IzPack簡介

          4.2.2.工作原理

          五.方案實(shí)例

          六.結(jié)束

          一. 背景:

          隨著Java在應(yīng)用產(chǎn)品開發(fā)中的廣泛應(yīng)用,基于Java的應(yīng)用產(chǎn)品也就越來越多,那么如何為基于Java的應(yīng)用產(chǎn)品制作安裝程序的需求就產(chǎn)生了。以前人們一般都是使用InstallShieldInstallAnyWhere進(jìn)行產(chǎn)品安裝程序的制作,這是兩個功能非常強(qiáng)大、易用的安裝盤制作工具,尤其是InstallAnyWhere,它還支持Java應(yīng)用產(chǎn)品安裝制作,例如:大名鼎鼎的Jbuilder安裝程序就是由它制作的。

          本文并不準(zhǔn)備對這些商業(yè)的安裝制作工具進(jìn)行討論,本文將就如何利用開源的安裝制作工具來進(jìn)行Java Web應(yīng)用產(chǎn)品程序制作進(jìn)行一些探討。

          二. 開源工具:

          目前用于支持Java應(yīng)用安裝程序制作的開源工具非常豐富,本人將要本人在研究過程中所遇到的羅列一二以供參考:

          Packlet

          Packlet是一個簡單的Java安裝制作工具。它將Java Application打包成一個可以發(fā)布的類似于ziptgz的壓縮文件中。這個壓縮文件被簡為packlet,它可以在安裝有Java 2 Runtime Environment的操作系統(tǒng)上執(zhí)行. 通過執(zhí)行packlet將會給用戶提供一個圖形化的安裝配置界面并解壓應(yīng)用。

          Go To Packlet

          IzPack

          IzPack是一個用于Java平臺的安裝程序生成器。它用于產(chǎn)生一個輕量級、能運(yùn)行于所有安裝了JVM的任何的操作系統(tǒng)的安裝程序。生成的安裝程序可以通過雙擊或在Command Line通過java jar install.jar命令進(jìn)行啟動,安裝程序運(yùn)行的方式具體將看操作系統(tǒng)的支持方式。IzPack的主要好處就是能夠生成運(yùn)行于任意操作系統(tǒng)的安裝程序。

          Go To IzPack

          JSmooth

          Jsmooth可以將Java可執(zhí)行應(yīng)用Wrapperwindow可執(zhí)行Exe程序。通過Jsmooth生成的Exe程序會自動按制作時定義的順序?qū)ふ液线m的JVM,如果能不查找到JVM,安裝程序會提示用戶并能根據(jù)定義好的URL啟動Web Browser讓用戶下載JVM. 注意:Jsmooth并不是純Java應(yīng)用。

          Go To JSmooth

          VAInstall

          VAInsall是一個用Java寫的多平臺安裝程序工具。它是基于GNU GPL2.0許可。通過一個簡單的配置文件,它允許安裝程序打包工具由不同的目錄下收集程序包,這與一般情況下安裝程序制作工具只能由一個根目錄開始相比更為靈活。由VAInstall生成的安裝程序允許先擇不同的安裝模式(graphic,textansi)

          Go To VAInstall

          Java Service Wrapper

          用于將Java Application安裝成為Window NT Service.同時與之附帶的scripts能夠很容易將Java Application安裝成為UNIX的后臺進(jìn)程。

          Go To Java Service Wrapper

          Lift Off Java Installer

          Lift Off Java Installer的最大特色就是:自解壓class 文件,對目標(biāo)系統(tǒng)要求低以及跨平臺性。

          Go To Lift Off Java Installer

          Toolshed

          一個小巧、簡單、純Java實(shí)現(xiàn)的安裝程序制作工作。

          Go To Toolshed

          Launch4J

          Lauch4J也是一個Java應(yīng)用Window Exe封裝工具。通過Lauch4J,可以提供splash screen, 圖標(biāo),自動查詢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是一個開源項(xiàng)目,完全用Java編寫。它將應(yīng)用程序打包成一個自解壓的Java應(yīng)用。通過FreeInstaller可以將Java或非Java的應(yīng)用安裝到UNIX,LINUX以及window NT系統(tǒng)中。

          Go To FreeInstaller

          Mini Installer

          一個簡單的Java安裝程序制作工具。整個制作過程是通過腳本完成的,最終生成一個可以通過雙擊方式執(zhí)行的jar文件。

          Go To Mini Installer

          通過對如上各產(chǎn)品的初步探索,本人最終選擇了利用izpack + jsmooth作為Java Web應(yīng)用產(chǎn)品的安裝程序制作方案。選擇這兩種工具并不代表其它開源工具不好,只是本人自已結(jié)合自已項(xiàng)目的需求(本人負(fù)責(zé)公司一企業(yè)應(yīng)用開發(fā)平臺的研發(fā)工作)及本人的偏好作出的選擇。

          由于本人所在公司為商業(yè)公司,所以本文描述的方案并不是企業(yè)應(yīng)用開發(fā)系統(tǒng)平臺的實(shí)現(xiàn)模式,本文只是提供一個解決辦法,關(guān)于如何與自已的框架或平臺進(jìn)行有效的整合,請讀者自行考慮。

          三. 環(huán)境準(zhǔn)備:

          你需要安裝J2SDK1.4.1+版本;關(guān)于J2SDK請由Sun公司下載;

          你需要安裝Ant1.6.2版本,理論上其它版本也行,只是本人用的是1.6.2

          請下載并安裝izpack;設(shè)定定裝到IZPACK_HOME

          請下載并安裝jsmooth;設(shè)定安裝到JSMOOTH_HOME

          四. 技術(shù)準(zhǔn)備:

          為了便于理解,你需要對Java進(jìn)行應(yīng)用的開發(fā)有一定的基礎(chǔ),本例將以Web應(yīng)用的安裝程序制作為背景進(jìn)行相關(guān)介紹,所以需要你對Web 應(yīng)用開發(fā)以及其發(fā)布方式有一定的基礎(chǔ);另外,本方案將會以Ant作為應(yīng)用build的工具,所以你需要有一定的Ant技術(shù);對于如上相關(guān)知識本部分不準(zhǔn)備介紹。下面本部分將主要對izpackjsmooth進(jìn)行簡單的介紹。

          4.1. jsmooth

          4.1.1 Jsmooth 簡介:

          Jsmooth,一個Java可執(zhí)行應(yīng)用封裝器(Wrapper),即將Java可執(zhí)行應(yīng)用程序(即可執(zhí)行jar)封裝為Window可執(zhí)行文件------exe文件的工具。

          通過Jsmooth將可執(zhí)行jar封裝為Exe文件,使得用戶執(zhí)行Java應(yīng)用就如同執(zhí)行一般的Window應(yīng)用程序一樣,重用用戶經(jīng)驗(yàn)。

          Jsmoothjar進(jìn)行封裝時可以設(shè)定classpathJVM參數(shù),命令行參數(shù),JVM版本及位置,這樣用戶在執(zhí)行exe時不用關(guān)心JVM,Classpath等問題,這樣就簡化了Java應(yīng)用執(zhí)行。

          4.1.2 工作原理:

          通過Jsmooth生成的Window Exe文件通常定義為“Jsmooth Application”;

          要想生成Jsmooth Application,我們需要一個JsmoothGen 項(xiàng)目文件-----.jsmooth文件,后面我們將其稱為“.jsmooth文件”;.jsmooth文件實(shí)際上是一個xml文件,用于描述/定義Jsmooth Application的相關(guān)屬性,例如:classpath, JVMJava main方法類,以及其它與Java應(yīng)用運(yùn)行相關(guān)的各種設(shè)定等;通常你可以通過Jsmooth提供的JsmoothGen.exe--------Windows Project Editor來創(chuàng)建和編輯這個文件,這個Editor如下圖所示:

          (-1)Widnow Project Editor

          (-2)Widnow Project Editor

          (-3)Widnow Project Editor

          .jsmooth文件生成之后,就可以通過如下方式生成目標(biāo)Jsmooth Application,即Exe文件:

          (1)Window Project Editor

          你可以直接在如上圖所示的編輯器通過工具條來生成:ProjectàCreate Exe

          (2)Command Line

          你也可以進(jìn)入。jsmooth文件所以目錄,通過如下命令來生成目標(biāo)Exe文件:

          ………> %jsmooth_home%"jsmoothcmd.exe yourproject.jsmooth

          (3)。通過Ant任務(wù)調(diào)用生成目標(biāo)Exe

          首先你需要在你的build文件中加入jsmooth Ant 任務(wù)定義:

          <> 

          classname="net.charabia.jsmoothgen.ant.JSmoothGen"

          classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>

          然后,通過jsmoothgen任務(wù)來執(zhí)行生成Exe的工作:

          skeletonroot=”${jsmooth_home}/skeletons”/>

          所以通過Jsmooth我們可以很容易將Java Application制作Windows Exe應(yīng)用。

          關(guān)于Jsmooth的詳細(xì)介紹請參考http://jsmooth.sourceforge.net

          4.2. izpack

          4.2.1. izpack簡介:

          izpack是基于Apache Software License 2.0許可的開源項(xiàng)目;

          izpack是純Java,對部分特性有針對不同平臺版本的Library。例如:快捷鍵的創(chuàng)建。

          izpack是一個用于解決安裝程序制作的Builder工具;

          通過izpack制作的安裝程序可以運(yùn)行于不同的操作系統(tǒng),Windows, Linux, Unix等,只要安裝了JDK1.4以及其后版本即可;

          izpack優(yōu)秀的模塊化設(shè)計(jì)可以允許你定制安裝程序外觀、安裝過程等;同時允許你通過其提供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對安裝定義文件進(jìn)行編譯,編譯的結(jié)果即是生成一個可執(zhí)行的jar文件,其中包括了整個安裝過程的實(shí)現(xiàn)以及安裝數(shù)據(jù);

          安裝定義文件:

          安裝過程定義文件是一個XML文件,installation是根元素,表示定義的開始。定義主要由如下幾部分組成:

          1.….

          用于定義安裝程序的基本信息;

          產(chǎn)品中文名稱

          產(chǎn)品版本號,例如:1.0-062312

          公司網(wǎng)址

          JDK版本號:1.4.2

          2.……

          用于定義安裝程序界面信息,例如:

          3.……..

          定義變量或配置信息,變量在整個安裝制作的過程中非常重要,變量兩種用途:其一:作為配置用,例如可以通過按照一定的命名稱規(guī)則為某個變量設(shè)定一個值,izpack在執(zhí)行安裝過程中將會讀取某個變量的值來決定某個安裝向?qū)Т翱谑欠窨梢姷龋焕纾何覀兛梢酝ㄟ^定義compareToVariable.compareToOperator.compareToValue.的組合決定第個用戶自定義的向?qū)Т翱谠诎惭b時是否可見,這樣就可以通過上個窗口用戶選擇來決定下個窗口是否可見;其二:作為替換變量用,通常安裝過程中收集的信息存放在變量中,然后,在安裝程序進(jìn)行到最后,利用變量的值來替換安裝目標(biāo)文件中的內(nèi)容。

          4. ….

          決定,安裝程序界面所支持的語言。

          5. ……..

          用于為安裝界面指定圖片或圖標(biāo)

          用于指定用戶自定義安裝向?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來實(shí)現(xiàn)的,你可以通過在……中定義的IDUserInputSpec.xml的資源(XML)中定義UserInputPanel窗口中用戶錄入項(xiàng)目及相關(guān)存放的變量。另外,Izpack支持條件用戶自定義Panel,ConditionalUserInputPanel,你可以在….中通過變量來控制這樣的向?qū)Т翱诘目梢娦浴.?dāng)安裝過程執(zhí)行到InstallPanelIzPack開始解壓安裝包到硬盤中,所以,一般來說所有的配置信息(例如,安裝目錄,安裝包的選擇等)都應(yīng)在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. …….

          本部分主要用于定義安裝包,即將哪些文件進(jìn)行打包,以及將來安裝時如何進(jìn)行安裝。通過可以將應(yīng)用程序文件分解成不同的安裝包,可以指定哪些pack是必須安裝的,哪些是可選的。

          前邊我們講過,我們可以在中加入自定義向?qū)Т翱趤碓试S用戶指定一些配置,這些配置信息被存放到變量中,我們可以利用用戶指定的值來替換應(yīng)用程序中部分文件中的內(nèi)容。那么在定義pack時,就可以指定哪些文件在安裝時需要進(jìn)行解析(parseable)。需要注意的,你需要指定需要解析的方式(xml, javaprop, plain,shell),如查將javaprop類型的文件解析類型設(shè)定為plain的話,可以就有問題,例如:如果變量的值為路徑,那么在可能就會有問題。

          另,對于每一個Pack在它安裝(copy文件)之后,可以定義它執(zhí)行一個程序,例如腳本程序。你可以利用這種功能來做一些工作,例如:你可執(zhí)行腳本程序來導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)等。

          下面是一個示例:

          <packs>

          <pack id="ToolKit" name="ToolKit" required="yes">

          …………

          pack>

          <pack id="Core" name="Core" required="yes">

          <description>packsLang.xmlpacksLang.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" />

          &

          posted on 2007-09-03 15:48 哼哼 閱讀(3283) 評論(0)  編輯  收藏 所屬分類: JAVA-Common
          主站蜘蛛池模板: 武宁县| 江源县| 锦州市| 汝州市| 寿宁县| 慈利县| 什邡市| 石阡县| 宜宾县| 固原市| 封开县| 清丰县| 友谊县| 阳高县| 都匀市| 岱山县| 宽甸| 祁东县| 沧州市| 镇平县| 雅江县| 康保县| 济阳县| 朝阳区| 江源县| 赣榆县| 庆云县| 永顺县| 潞西市| 雅安市| 资源县| 洱源县| 楚雄市| 永顺县| 临泉县| 满城县| 乐山市| 清流县| 河西区| 新邵县| 桓仁|