Picses' sky

          Picses' sky
          posts - 43, comments - 29, trackbacks - 0, articles - 24

          制作Java安裝程序(轉(zhuǎn))

          Posted on 2007-03-13 09:17 Matthew Chen 閱讀(2132) 評(píng)論(1)  編輯  收藏

          ROXES ANT,制作Java安裝程序- -

          ??????????????????????????????????????

          ?ROXES ANT Tasks
          這個(gè)工具利用 ANT 來(lái)制作在 Windows, MacOS X, Unix 平臺(tái)上可執(zhí)行的文件,比如 exe,zip,jar。ROXES ANT Tasks 基于 GPL 發(fā)布。
          ?主頁(yè)?A >http://www.roxes.com/produkte/rat.html

          ?企業(yè)開(kāi)源參考架構(gòu)

          本圖來(lái)自于灰狐動(dòng)力: http://www.huihoo.com/

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


          目錄:
          隨著Java在應(yīng)用產(chǎn)品開(kāi)發(fā)中的廣泛應(yīng)用,基于Java的應(yīng)用產(chǎn)品也就越來(lái)越多,那么如何為基于Java的應(yīng)用產(chǎn)品制作安裝程序的需求就產(chǎn)生了。以前人們一般都是使用InstallShield與InstallAnyWhere進(jìn)行產(chǎn)品安裝程序的制作,這是兩個(gè)功能非常強(qiáng)大、易用的安裝盤(pán)制作工具,尤其是InstallAnyWhere,它還支持Java應(yīng)用產(chǎn)品安裝制作,例如:大名鼎鼎的Jbuilder安裝程序就是由它制作的。
          本文并不準(zhǔn)備對(duì)這些商業(yè)的安裝制作工具進(jìn)行討論,本文將就如何利用開(kāi)源的安裝制作工具來(lái)進(jìn)行Java Web應(yīng)用產(chǎn)品程序制作進(jìn)行一些探討。
          目前用于支持Java應(yīng)用安裝程序制作的開(kāi)源工具非常豐富,本人將要本人在研究過(guò)程中所遇到的羅列一二以供參考:
          Packlet 是一個(gè)簡(jiǎn)單的 Java 安裝制作工具。它將 Java Application 打包成一個(gè)可以發(fā)布的類似于 zip tgz 的壓縮文件中。這個(gè)壓縮文件被簡(jiǎn)為 packlet ,它可以在安裝有 Java 2 Runtime Environment 的操作系統(tǒng)上執(zhí)行 . 通過(guò)執(zhí)行 packlet 將會(huì)給用戶提供一個(gè)圖形化的安裝配置界面并解壓應(yīng)用。
          IzPack 是一個(gè)用于 Java 平臺(tái)的安裝程序生成器。它用于產(chǎn)生一個(gè)輕量級(jí)、能運(yùn)行于所有安裝了 JVM 的任何的操作系統(tǒng)的安裝程序。生成的安裝程序可以通過(guò)雙擊或在 Command Line 通過(guò) java –jar install.jar 命令進(jìn)行啟動(dòng),安裝程序運(yùn)行的方式具體將看操作系統(tǒng)的支持方式。 IzPack 的主要好處就是能夠生成運(yùn)行于任意操作系統(tǒng)的安裝程序。
          Jsmooth 可以將 Java 可執(zhí)行應(yīng)用 Wrapper window 可執(zhí)行 Exe 程序。通過(guò) Jsmooth 生成的 Exe 程序會(huì)自動(dòng)按制作時(shí)定義的順序?qū)ふ液线m的 JVM ,如果能不查找到 JVM ,安裝程序會(huì)提示用戶并能根據(jù)定義好的 URL 啟動(dòng) Web Browser 讓用戶下載 JVM. 注意: Jsmooth 并不是純 Java 應(yīng)用。
          VAInsall 是一個(gè)用 Java 寫(xiě)的多平臺(tái)安裝程序工具。它是基于 GNU GPL2.0 許可。通過(guò)一個(gè)簡(jiǎn)單的配置文件,它允許安裝程序打包工具由不同的目錄下收集程序包,這與一般情況下安裝程序制作工具只能由一個(gè)根目錄開(kāi)始相比更為靈活。由 VAInstall 生成的安裝程序允許先擇不同的安裝模式 (graphic,text ansi)
          用于將 Java Application 安裝成為 Window NT Service. 同時(shí)與之附帶的 scripts 能夠很容易將 Java Application 安裝成為 UNIX 的后臺(tái)進(jìn)程。
          Lift Off Java Installer 的最大特色就是:自解壓 class 文件,對(duì)目標(biāo)系統(tǒng)要求低以及跨平臺(tái)性。
          一個(gè)小巧、簡(jiǎn)單、純 Java 實(shí)現(xiàn)的安裝程序制作工作。
          Lauch4J 也是一個(gè) Java 應(yīng)用 Window Exe 封裝工具。通過(guò) Lauch4J ,可以提供 splash screen, 圖標(biāo),自動(dòng)查詢 JRE 或內(nèi)置 JRE 等功能,同時(shí)還支持啟動(dòng)失敗反饋以及命令行參數(shù)。
          AntInstaller 是一個(gè)安裝程序框架,它利用一個(gè)簡(jiǎn)單的 XML 定義安裝界面,并以 Ant 執(zhí)行安裝過(guò)程。基于 AntInstaller 的安裝程序可以打包成自解壓 jar 通過(guò) command line 執(zhí)行可 Swing GUI 來(lái)執(zhí)行。
          Antigen---- Ant Installer Generator 。它主要的目的就是根據(jù) Ant 腳本創(chuàng)建圖形化安裝程序。
          FreeInstaller 是一個(gè)開(kāi)源項(xiàng)目,完全用 Java 編寫(xiě)。它將應(yīng)用程序打包成一個(gè)自解壓的 Java 應(yīng)用。通過(guò) FreeInstaller 可以將 Java 或非 Java 的應(yīng)用安裝到 UNIX,LINUX 以及 window NT 系統(tǒng)中。
          一個(gè)簡(jiǎn)單的 Java 安裝程序制作工具。整個(gè)制作過(guò)程是通過(guò)腳本完成的,最終生成一個(gè)可以通過(guò)雙擊方式執(zhí)行的 jar 文件。
          通過(guò)對(duì)如上各產(chǎn)品的初步探索,本人最終選擇了利用izpack + jsmooth作為Java Web應(yīng)用產(chǎn)品的安裝程序制作方案。選擇這兩種工具并不代表其它開(kāi)源工具不好,只是本人自已結(jié)合自已項(xiàng)目的需求(本人負(fù)責(zé)公司一企業(yè)應(yīng)用開(kāi)發(fā)平臺(tái)的研發(fā)工作)及本人的偏好作出的選擇。
          由于本人所在公司為商業(yè)公司,所以本文描述的方案并不是企業(yè)應(yīng)用開(kāi)發(fā)系統(tǒng)平臺(tái)的實(shí)現(xiàn)模式,本文只是提供一個(gè)解決辦法,關(guān)于如何與自已的框架或平臺(tái)進(jìn)行有效的整合,請(qǐng)讀者自行考慮。
          • 你需要安裝J2SDK1.4.1+版本;關(guān)于J2SDK請(qǐng)由Sun公司下載;
          • 你需要安裝Ant1.6.2版本,理論上其它版本也行,只是本人用的是1.6.2;
          • 請(qǐng)下載并安裝izpack;設(shè)定定裝到IZPACK_HOME
          • 請(qǐng)下載并安裝jsmooth;設(shè)定安裝到JSMOOTH_HOME
          為了便于理解,你需要對(duì)Java進(jìn)行應(yīng)用的開(kāi)發(fā)有一定的基礎(chǔ),本例將以Web應(yīng)用的安裝程序制作為背景進(jìn)行相關(guān)介紹,所以需要你對(duì)Web 應(yīng)用開(kāi)發(fā)以及其發(fā)布方式有一定的基礎(chǔ);另外,本方案將會(huì)以Ant作為應(yīng)用build的工具,所以你需要有一定的Ant技術(shù);對(duì)于如上相關(guān)知識(shí)本部分不準(zhǔn)備介紹。下面本部分將主要對(duì)izpack及jsmooth進(jìn)行簡(jiǎn)單的介紹。
          4.1.1 Jsmooth 簡(jiǎn)介:
          Jsmooth,一個(gè)Java可執(zhí)行應(yīng)用封裝器(Wrapper),即將Java可執(zhí)行應(yīng)用程序(即可執(zhí)行jar)封裝為Window可執(zhí)行文件------exe文件的工具。
          通過(guò)Jsmooth將可執(zhí)行jar封裝為Exe文件,使得用戶執(zhí)行Java應(yīng)用就如同執(zhí)行一般的Window應(yīng)用程序一樣,重用用戶經(jīng)驗(yàn)。
          Jsmooth對(duì)jar進(jìn)行封裝時(shí)可以設(shè)定classpath,JVM參數(shù),命令行參數(shù),JVM版本及位置,這樣用戶在執(zhí)行exe時(shí)不用關(guān)心JVM,Classpath等問(wèn)題,這樣就簡(jiǎn)化了Java應(yīng)用執(zhí)行。
          4.1.2 工作原理:
          通過(guò)Jsmooth生成的Window Exe文件通常定義為“Jsmooth Application”;
          要想生成Jsmooth Application,我們需要一個(gè)JsmoothGen 項(xiàng)目文件-----.jsmooth文件,后面我們將其稱為“.jsmooth文件”;.jsmooth文件實(shí)際上是一個(gè)xml文件,用于描述/定義Jsmooth Application的相關(guān)屬性,例如:classpath, JVM,Java main方法類,以及其它與Java應(yīng)用運(yùn)行相關(guān)的各種設(shè)定等;通常你可以通過(guò)Jsmooth提供的JsmoothGen.exe--------Windows Project Editor來(lái)創(chuàng)建和編輯這個(gè)文件,這個(gè)Editor如下圖所示:
          ( 圖-1)Widnow Project Editor
          ( 圖-2)Widnow Project Editor
          (圖-3)Widnow Project Editor
          在.jsmooth文件生成之后,就可以通過(guò)如下方式生成目標(biāo)Jsmooth Application,即Exe文件:
          (1)。Window Project Editor:
          你可以直接在如上圖所示的編輯器通過(guò)工具條來(lái)生成:ProjectàCreate Exe
          (2)。Command Line:
          你也可以進(jìn)入。jsmooth文件所以目錄,通過(guò)如下命令來(lái)生成目標(biāo)Exe文件:
          ………> %jsmooth_home%\jsmoothcmd.exe yourproject.jsmooth
          (3)。通過(guò)Ant任務(wù)調(diào)用生成目標(biāo)Exe
          首先你需要在你的build文件中加入jsmooth Ant 任務(wù)定義:
          <="" span="" /> <>
          classname="net.charabia.jsmoothgen.ant.JSmoothGen"
          classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
          然后,通過(guò)jsmoothgen任務(wù)來(lái)執(zhí)行生成Exe的工作:
          skeletonroot=”${jsmooth_home}/skeletons”/>
          所以通過(guò)Jsmooth我們可以很容易將Java Application制作Windows Exe應(yīng)用。
          關(guān)于Jsmooth的詳細(xì)介紹請(qǐng)參考http://jsmooth.sourceforge.net/
          4.2.1. izpack 簡(jiǎn)介:
          • izpack是基于Apache Software License 2.0許可的開(kāi)源項(xiàng)目;
          • izpack是純Java,對(duì)部分特性有針對(duì)不同平臺(tái)版本的Library。例如:快捷鍵的創(chuàng)建。
          • izpack是一個(gè)用于解決安裝程序制作的Builder工具;
          • 通過(guò)izpack制作的安裝程序可以運(yùn)行于不同的操作系統(tǒng),Windows, Linux, Unix等,只要安裝了JDK1.4以及其后版本即可;
          • izpack優(yōu)秀的模塊化設(shè)計(jì)可以允許你定制安裝程序外觀、安裝過(guò)程等;同時(shí)允許你通過(guò)其提供API調(diào)整izpack安裝過(guò)程。
          • 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.
          利用izpack制作安裝程序的主要有兩步:
          第一步:創(chuàng)建并描述安裝定義文件;
          第二步:通過(guò)izpack提供CommandLine工具或Ant Task對(duì)安裝定義文件進(jìn)行編譯,編譯的結(jié)果即是生成一個(gè)可執(zhí)行的jar文件,其中包括了整個(gè)安裝過(guò)程的實(shí)現(xiàn)以及安裝數(shù)據(jù);
          • 安裝定義文件:
          安裝過(guò)程定義文件是一個(gè)XML文件,installation是根元素,表示定義的開(kāi)始。定義主要由如下幾部分組成:
          1.…./STRONG>
          用于定義安裝程序的基本信息;

          產(chǎn)品中文名稱 /SPAN>
          產(chǎn)品版本號(hào),例如: 1.0-062312/SPAN>
          公司網(wǎng)址 /SPAN>
          JDK 版本號(hào): 1.4.2/SPAN>
          /FONT>
          2 ……/STRONG>
          用于定義安裝程序界面信息,例如:

          /FONT>
          3.……../STRONG>
          定義變量或配置信息,變量在整個(gè)安裝制作的過(guò)程中非常重要,變量?jī)煞N用途:其一:作為配置用,例如可以通過(guò)按照一定的命名稱規(guī)則為某個(gè)變量設(shè)定一個(gè)值,izpack在執(zhí)行安裝過(guò)程中將會(huì)讀取某個(gè)變量的值來(lái)決定某個(gè)安裝向?qū)Т翱谑欠窨梢?jiàn)等;例如:我們可以通過(guò)定義compareToVariable.、compareToOperator.與compareToValue.的組合決定第個(gè)用戶自定義的向?qū)Т翱谠诎惭b時(shí)是否可見(jiàn),這樣就可以通過(guò)上個(gè)窗口用戶選擇來(lái)決定下個(gè)窗口是否可見(jiàn);其二:作為替換變量用,通常安裝過(guò)程中收集的信息存放在變量中,然后,在安裝程序進(jìn)行到最后,利用變量的值來(lái)替換安裝目標(biāo)文件中的內(nèi)容。

          /FONT>
          4. …./STRONG>
          決定,安裝程序界面所支持的語(yǔ)言。

          /FONT>
          5. ……../STRONG>
          用于為安裝界面指定圖片或圖標(biāo)
          用于指定用戶自定義安裝向?qū)Т翱诙xXML文件的位置
          用于指定安裝向?qū)Т翱谥袊?guó)際化資源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" />
          SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">resources >
          6. ……. /STRONG>
          本部分用于定義整個(gè)安裝過(guò)程,每個(gè)panel即是一個(gè)安裝向?qū)Т翱冢琾anel是按順序由IzPack調(diào)用的。IzPack內(nèi)置了很多的Panel,另外它還支持用戶自定義的功能,主要是通過(guò)UserInputPanel來(lái)實(shí)現(xiàn)的,你可以通過(guò)在……定義的ID為UserInputSpec.xml的資源(XML)中定義UserInputPanel窗口中用戶錄入項(xiàng)目及相關(guān)存放的變量。另外,Izpack支持條件用戶自定義Panel,即ConditionalUserInputPanel,你可以在….通過(guò)變量來(lái)控制這樣的向?qū)Т翱诘目梢?jiàn)性。當(dāng)安裝過(guò)程執(zhí)行到InstallPanel時(shí)IzPack開(kāi)始解壓安裝包到硬盤(pán)中,所以,一般來(lái)說(shuō)所有的配置信息(例如,安裝目錄,安裝包的選擇等)都應(yīng)在InstallPanel之前完成。在InstallPanel之后可以通過(guò)ShortcutPanel來(lái)顯示快捷方式創(chuàng)建窗口,另外還可以通過(guò)ProcessPanel來(lái)執(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" />
          SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">panels >
          7. ……. /STRONG>
          本部分主要用于定義安裝包,即將哪些文件進(jìn)行打包,以及將來(lái)安裝時(shí)如何進(jìn)行安裝。通過(guò)可以將應(yīng)用程序文件分解成不同的安裝包,可以指定哪些pack是必須安裝的,哪些是可選的。
          前邊我們講過(guò),我們可以在中加入自定義向?qū)Т翱趤?lái)允許用戶指定一些配置,這些配置信息被存放到變量中,我們可以利用用戶指定的值來(lái)替換應(yīng)用程序中部分文件中的內(nèi)容。那么在定義pack時(shí),就可以指定哪些文件在安裝時(shí)需要進(jìn)行解析(parseable)。需要注意的,你需要指定需要解析的方式(xml, javaprop, plain,shell),如查將javaprop類型的文件解析類型設(shè)定為plain的話,可以就有問(wèn)題,例如:如果變量的值為路徑,那么在可能就會(huì)有問(wèn)題。
          另,對(duì)于每一個(gè)Pack在它安裝(copy文件)之后,可以定義它執(zhí)行一個(gè)程序,例如腳本程序。你可以利用這種功能來(lái)做一些工作,例如:你可執(zhí)行腳本程序來(lái)導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)等。
          下面是一個(gè)示例:

          < packs >
          < pack id = "ToolKit" name = "ToolKit" required = "yes" >
          …………
          SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">pack >
          < pack id = "Core" name = "Core" required = "yes" >
          < description > packsLang.xml packsLang.xml_chn 中描述了 . SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">description >
          < fileset dir = "app" targetdir = "$INSTALL_PATH\app" >
          < include name = "*" />
          < include name = "**" />
          SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">fileset >
          < fileset dir = "native" targetdir = "$INSTALL_PATH\native" >
          < include name = "*" />
          < include name = "**" />
          SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">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" />
          &




          我想把我做好的java應(yīng)用程序做成安裝包,可以在沒(méi)有java環(huán)境的電腦上順利安裝和運(yùn)行,請(qǐng)問(wèn)該如何制作?需要用到什么工具?

          我現(xiàn)在還在測(cè)試的方法是:把com(編譯產(chǎn)生的類文件目錄,是代碼中的包)、image(圖標(biāo)目錄)和lib(第三方庫(kù)文件,比如jbuilder的jbcl.jar)壓縮成一個(gè).jar文件,配合一個(gè)data(數(shù)據(jù)庫(kù)目錄,一個(gè)access文件),只要雙擊jar文件就可以運(yùn)行。是不是還要一個(gè)jre安裝包?

          請(qǐng)指教,多謝!


          用InstallAnywhere等安裝包制作工具是相對(duì)方便的
          他可以搜索本機(jī)JRE,或是單獨(dú)安裝一個(gè)JRE,生成exe laucher

          自己做的,把JRE復(fù)制下來(lái),寫(xiě)個(gè)bat執(zhí)行那個(gè)jre中的java
          如MyProject/JRE
          MyProject/run.bat JRE/bin/java.exe -Xmx300M -jar project.jar

          ?

          shsen wrote:
          你是說(shuō)把j2sdk安裝目錄下的那個(gè)jre目錄拷貝到我的程序目錄下,再做一個(gè)bat文件就可以嗎?

          -Xmx300M 是什么意思?

          ?

          對(duì)的,在沒(méi)有用InstallAnywhere之前我這么做過(guò)。
          -Xmx300M是指JVM最大分配內(nèi)存300M,如果你的應(yīng)用不大,就不用管這個(gè)


          謝謝,我試試看。也安裝了IA5,試用了一下,好像產(chǎn)生出來(lái)的不是可執(zhí)行文件。


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东莞市| 图们市| 浠水县| 湘西| 长乐市| 延庆县| 成安县| 武宣县| 丹凤县| 崇阳县| 宽甸| 武乡县| 岳阳市| 天柱县| 离岛区| 大理市| 林周县| 宁明县| 潜江市| 景德镇市| 合山市| 溧阳市| 海门市| 平罗县| 清水县| 高陵县| 通许县| 柳河县| 中西区| 常山县| 巴楚县| 乐安县| 那曲县| 阿克| 定安县| 镇安县| 阿拉善右旗| 凉城县| 南丰县| 麟游县| 锦屏县|