Eclipse SWT應(yīng)用程序項目的打包與部署當(dāng)項目完成后接下來的就是打包發(fā)行了,應(yīng)用程序(Application)項目和Eclipse插件項目(plugin)的打包是不同的,,本章將分別介紹兩者的打包方法,,并給出實(shí)際的打包例子。 7.1 應(yīng)用程序項目的打包與發(fā)行7.1.1 簡介Java應(yīng)用程序項目完成后是可以脫離Eclipse運(yùn)行的,,要運(yùn)行程序先要打它打成一個JAR包,,它打包的大部份方法和標(biāo)準(zhǔn)Java的AWT/SWING的打包方法一樣,主要有以下幾個要點(diǎn) l MANIFEST.MF - 打包清單,。它是打包的關(guān)鍵性文件,,主要是設(shè)置執(zhí)行入口類和支持庫的路徑,在運(yùn)行Java應(yīng)用程序時是要根據(jù)此文件中給出的信息來查找入口類和支持庫,。 l 支持包 -如果Java應(yīng)用程序用到了一些Eclipse包,,那么就必須將這些包也復(fù)制到程序運(yùn)行目錄,否則程序?qū)o法運(yùn)行,。如swt組件支持包swt.jar,,jface組件支持包jface.jar。這些包都要在MANIFEST.MF文件中設(shè)置好,。 l 本地化文件 - 如果用到了SWT組件,,則還需要將SWT的本地化文件swt-win32-3063.dll(3063是版本號)復(fù)制到程序運(yùn)行目錄,否則程序?qū)o法運(yùn)行。 7.1.2 打包的具體操作步驟本節(jié)將用前幾章開發(fā)的SWT/JFace項目"myswt"的打包為例,,來介紹打包應(yīng)用程序項目的方法,。 1、編輯清單MANIFEST.MF (1)Eclipse提供了用于打包項目的"導(dǎo)出"向?qū)?,但本例運(yùn)行此向?qū)е跋刃枰獎?chuàng)建一個MANIFEST.MF清單文件,,其內(nèi)容如下: Manifest-Version: 1.0 Main-Class: book.chapter_4.wizard_dialog.WizardDialog1 Class-Path: ./lib/swt.jar ./lib/jface.jar ./lib/runtime.jar 說明: l Manifest-Version - 指定清單文件的版本號 l Main-Class - 指定程序運(yùn)行的入口類。本例設(shè)為運(yùn)行4.5.2節(jié)開發(fā)的向?qū)綄υ捒?。注意:類名后不要加class擴(kuò)展名 l Class-Path - 指定支持庫的路徑,。"."指程序運(yùn)行目錄,即導(dǎo)出的JAR包所在目錄,。程序運(yùn)行時依據(jù)Class-Path項的設(shè)置路徑來查找支持庫,。每一個支持庫之間用空格隔開。在這里jface.jar需要用到runtime.jar包,,所以runtime.jar包也要加入到Class-Path中,。 l 除了入口類的包名和類名之外,其他設(shè)置項都不分大小寫,,比如:Class-Path寫成class-path或CLASS-PATH也可以,,swt.jar寫成SWT.JAR也行,。 (2)將清單文件保存下來,,建議放在myswt項目的根目錄下。它的文件名可以任意取,,本例取名為manifes.txt,,Eclipse向?qū)г诖虬鼤r會自動的將manifes.txt的內(nèi)容復(fù)制到JAR包的META-INF目錄下的MANIFEST.MF文件中。 2,、使用Eclipse"導(dǎo)出"向?qū)泶虬椖?/P> (1)右鍵單擊myswt項目的項目名,,在彈出菜單中選擇"導(dǎo)出"。在彈出的如下圖7.1所示的對話框中,,選擇"JAR文件",,單擊"下一步"。 圖7.1 導(dǎo)出對話框 (2)如下圖7.2所示,,將右邊不需要的文件都取消勾選,。在"選擇導(dǎo)出目標(biāo)"項文本框中設(shè)置JAR包的輸出路徑和包名(可以任意取名)為"D:\myswt_application\myswt.jar"。接受其他的默認(rèn)設(shè)置不變,,單擊"下一步",。 附注:左邊雖然選擇了src目錄,但源文件并不會導(dǎo)出到包中,,除非勾選了"導(dǎo)出Java源代碼文件和資源"項,。 圖7.2 選擇導(dǎo)入文件 (3)如下圖7.3所示,接受默認(rèn)設(shè)置不變,單擊"下一步",。 圖7.3 導(dǎo)出類的選項 (4)這一步較關(guān)鍵,。如下圖7.4所示,選擇"從工作空間中使用現(xiàn)有清單"項,,將創(chuàng)建的清單文件輸入,,也可以通過旁邊的"瀏覽"按鈕來選擇清單文件。輸入清單文件后,,單擊"完成",,Eclipse開始將項目打包。 圖7.4 清單文件設(shè)置 經(jīng)過以上四步后,,在"D:\myswt_application"路徑下生成了一個名為"myswt.jar"的文件,。myswt.jar是一個ZIP格式的壓縮文件,可以用WinRAR或WinZip軟件打開,,也就是說用這兩個軟件也可以替代Eclipse向?qū)泶虬募?。如果用WinRAR來打包文件,則壓縮格式要選擇ZIP格式而非RAR格式,,壓縮率倒可以任意選,。 用WinRAR打開myswt.jar文件后其內(nèi)部的目錄結(jié)構(gòu)如下圖7.5所示: 圖7.5 myswt.jar文件的內(nèi)部目錄結(jié)構(gòu) 在myswt.jar文件的內(nèi)部目錄META-INF中僅一個文件:MANIFEST.MF,它和以前創(chuàng)建的清單文件manifest.txt的內(nèi)容是一樣的,,如下: Manifest-Version: 1.0 Class-Path: ./lib/swt.jar ./lib/jface.jar ./lib/runtime.jar Main-Class: book.chapter_4.wizard_dialog.WizardDialog1 3,、復(fù)制Java應(yīng)用程序的支持包及本地化文件 在MANIFEST.MF文件中的Class-Path項設(shè)置了三個包,從Eclipse的plugins目錄中將此三個支持包復(fù)制到D:\myswt_application\lib目錄,,本地化文件swt-win32-3063.dll復(fù)制到D:\myswt_application目錄中,。此三個文件在Eclipse中的路徑為: plugins\org.eclipse.swt.win32_3.0.1\ws\win32\swt.jar plugins\org.eclipse.jface_3.0.0\jface.jar plugins\org.eclipse.core.runtime_3.0.1\runtime.jar plugins\org.eclipse.swt.win32_3.0.1\os\win32\x86\swt-win32-3063.dll 復(fù)制完成后的目錄結(jié)構(gòu)如下圖7.6所示: 圖7.6 目錄結(jié)構(gòu)圖 4、編寫運(yùn)行myswt.jar包的批處理程序"run.bat" 在myswt_application目錄下創(chuàng)建一個批處理程序run.bat(名字任取,,擴(kuò)展名必須是bat),,其內(nèi)容僅一句語句,如下: javaw -jar myswt.jar 說明: l javaw對應(yīng)c:\jdk\jre\bin\javaw.exe文件,,如果windows提示命令未發(fā)現(xiàn),,則需要將c:\jdk\jre\bin路徑加入到windows環(huán)境變量path中。 l 在運(yùn)行程序的時候有一個討厭的黑色命令行窗口,,要去掉它,,可以將run.bat內(nèi)容更改如下:"start javaw -jar myswt.jar",start是指調(diào)用了windows的"運(yùn)行"命令,。 l 如果想將swt-win32-3063.dll也放在單獨(dú)的目錄中,,如"D:\myswt_application\native"目錄,則需將run.bat內(nèi)容更改為: start javaw -Djava.library.path=./native/ -jar myswt.jar 5,、運(yùn)行程序 雙擊run.bat文件,,得到如下圖7.7所示的程序界面。 圖7.7 程序運(yùn)行效果圖 6、注意事項 本例只需要三個支持包,,但你的程序也許會需要更多的支持包才能運(yùn)行,。如果你想一次到位,則可以將"Java構(gòu)建路徑"的"庫"選項卡中所有引用的包都復(fù)制到lib目錄中,。如果你喜歡用到什么包才加入什么包,,希望維持打包文件的簡潔,則需要自己一步步的去試:如果缺少某支持包,,運(yùn)行程序時會輸出的未找到類的錯誤信息,,從信息中的包名可得知程序缺少哪一個支持包。比如"Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jface/wizard/IWizard",,從錯誤信息中很明顯的就能知道程序缺少jface包 7.1.3 其他得到JAR包的方式要得到JAR包除了以上所說的用Eclipse"導(dǎo)出"向?qū)?、用WinZip和WinRAR,另外還能用Java自帶的命令行式打包軟件jar.exe(位于c:\jdk\bin目錄),,其打包命令為: c:\jdk\bin\jar cvfm myswt.jar C:\eclipse3.0.1\eclipse\workspace\myswt\manifest.txt -C C:\eclipse3.0.1\eclipse\workspace\myswt\bin . 說明: l c:\jdk\bin\jar - 由于本書沒有把c:\jdk\bin加入到windows環(huán)境變量path中,,所以手工指定jar.exe的路徑 l cvfm - jar.exe的參數(shù),"c"創(chuàng)建新的jar包,;"v"將調(diào)試信息打印在屏幕上,;"f"指定生成的jar文件名;"m"使用清單文件,。注意它們都是小寫 l myswt.jar - 打包后的JAR包名 l 在前面是把清單文件manifest.txt放在C:\eclipse3.0.1\eclipse\workspace\myswt\目錄下,。如果將它和批處理文件放在一個目錄就不必指定長長的路徑了。 l "-C 路徑 . "指將路徑下(包括子目錄)的所有文件打包,,由于class文件是輸出在項目的bin目錄下,,所以路徑指定到項目的bin目錄,,注意三者之間是用空格隔開,,并且最后一個字符是小數(shù)點(diǎn)。 這種方式的優(yōu)點(diǎn)是沒有Eclipse導(dǎo)出向?qū)У牟僮髂敲绰闊?,適合經(jīng)常需要導(dǎo)出JAR包的情況,。 7.1.4 使用第三方插件對項目打包 開源組織(http:///)中有一款可將Eclipse支持包和項目編譯文件一起打到一個包中的插件,叫"Fat Jar",,它的下載地址是"http://fjep./",,具體下載不再說明,安裝步驟參閱第1章SWT Designer的安裝,。 Fat Jar的使用步驟如下: (1)右鍵單擊myswt項目的項目名,,可見菜單中多了一項"Build Fat Jar",如下圖7.8所示,,選擇"Build Fat Jar"項,。 圖7.8 右鍵菜單 (2)在下圖7.9所示的對話框中,"Jar-Name"項填入JAR包的輸出路徑。文件清單"Manifest"項不用填,,默認(rèn)會自動創(chuàng)建一個,。"Main-Class"項填入程序的入口類。其他都接受默認(rèn)值,,單擊"下一步",。 圖7.9 輸出配置 (3)如下圖7.10所示,窗口中將myswt項目所用到的支持包都列了出來,。我們僅勾選圖中runtime.jar,、swt.jar、jface.jar這三項即可,,當(dāng)然全選也并嘗不可,,只是最后得到的JAR包會更大一些,因為Fat Jar會將所有支持包合并在一個JAR包中,。 圖7.10 選擇要打包的文件 單擊圖7.10的"完成"按鈕后,, JAR包myswt.jar將輸出到D:\myswt_applicationh目錄中。和以前一樣,,要運(yùn)行此JAR包需要一個批處理文件以及本地化文件swt-win32-3063.dll,,唯一不同的是不再需要Eclipse支持包,其目錄結(jié)構(gòu)如下圖7.11所示: 圖7.11 目錄結(jié)構(gòu) 為什么不需要Eclipse支持包了呢,?那是因為支持包已經(jīng)在myswt.jar文件中了,,從下圖7.12可以看到swt.jar等都被拆散成目錄,并包含在myswt.jar包中,。 圖7.12 myswt.jar的內(nèi)部目錄結(jié)構(gòu) 其中META-INF目錄的MANIFEST.MF文件內(nèi)容如下,,可以發(fā)現(xiàn)和以前不同的地方是:Class-Path項沒有了。 Manifest-Version: 1.0 Created-By: Fat Jar Eclipse Plug-In Main-Class: book.chapter_4.wizard_dialog.WizardDialog1 7.1.4 讓用戶電腦不必安裝JRE環(huán)境通常運(yùn)行Java程序有個前提條件:用戶電腦必須先安裝JRE環(huán)境,。雖然安裝JRE環(huán)境非常簡單,,但畢竟多了一步,算是有一點(diǎn)點(diǎn)的瑕疵,。這里給出一個不必讓用戶安裝JRE環(huán)境的方法,,其實(shí)現(xiàn)步驟如下: (1)將原JDK中的"jre"目錄復(fù)制到"D:\myswt_application\java1.4.2"目錄下(java1.4.2也可換成其他名稱)。 (2)將JDK和JRE從本機(jī)卸載掉,,這樣表示本機(jī)沒有安裝JAVA運(yùn)行環(huán)境,。 (3)修改批處理文件run.bat中的命令為"start java1.4.2\jre\bin\javaw -jar myswt.jar",僅僅是在javaw前加上了一個相對應(yīng)路徑,。 雙擊run.bat即可在不安裝JRE環(huán)境的電腦運(yùn)行此Java應(yīng)用程序,。 7.1.5 更進(jìn)一步的完善1、拋棄批處理文件(*.bat) 用批處理文件運(yùn)行程序似乎不夠?qū)I(yè),,雖然它足以完成運(yùn)行任務(wù),。但習(xí)慣就象一種毒藥一旦染上就很難擺脫它的影響,,Windows統(tǒng)治下的人們早已經(jīng)習(xí)慣運(yùn)行擴(kuò)展名是EXE的程序,用*.bat他們就會感覺別扭,。 我們可以用一個叫JavaLauncher的免費(fèi)小程序來代替批處理文件去運(yùn)行Java程序,。JavaLauncher的下載網(wǎng)址是: http://www./nonRoleMaker/javalauncher/marner_java_launcher.htm 下載下來的文件是一個名JavaLauncher.zip的壓縮包,解壓后的目錄結(jié)構(gòu)如下圖7.13所示: 圖7.13 JavaLauncher.zip目錄結(jié)構(gòu) 在上圖的目錄中 l source目錄包含了JavaLauncher的源程序,,是用C語言寫的 l changes.txt是新版的修改說明 l launch.exe是主程序 l launcher.cfg是配置文件 l readme.txt是一些說明和示例 我們只需要launch.exe,、launcher.cfg兩個文件,將這兩個文件復(fù)制到打包文件所在的目錄,。launcher.cfg是一個僅三行內(nèi)容的文本文件,,將它修改如下: . .\java1.4.2\jre\bin\javaw.exe -jar myswt.jar l 第一行設(shè)置指向JAR包myswt.jar的目錄,由于launch.exe和myswt.jar同在一個目錄,,所以用"."即當(dāng)前目錄,。 l 第二行設(shè)置指向jre\bin\javaw.exe的路徑。在上一小節(jié)(7.1.4節(jié))已將jre目錄復(fù)制到了java1.4.2子目錄中 配置好launcher.cfg后,,雙擊launch.exe即可運(yùn)行java應(yīng)用程序,。 如果仔佃研究eclipse的啟動方式,發(fā)現(xiàn)eclipse和JavaLauncher的原理一樣:eclipse.exe相當(dāng)于launch.exe,,startup.jar相當(dāng)于myswt.jar,。只不過eclipse.exe不象launch.exe要具有通用性,所以它沒有*.cfg這樣的配置文件,,而是將啟動信息固化在eclipse.exe中,。 2、美化圖標(biāo) launch.exe文件的圖標(biāo)太單調(diào)了,,讓我們給它換個好看點(diǎn)的,。換程序的圖標(biāo)需要用到一個免費(fèi)的軟件:Resource Hacker,它有中文版,,下載網(wǎng)址是: http://www.users./johnson/resourcehacker/ 用Resource Hacker來替換launch.exe的圖標(biāo)的步驟如下: (1)運(yùn)行Resource Hacker,,得到如下圖7.14所示的窗口。 圖7.14 Resource Hacker的主界面 (2)單擊主菜單"文件→打開",,將launch.exe載入到程序中,,結(jié)果如下圖7.15所示。 圖7.15 載入Lanunch.exe之后的界面 (3)如上圖,,選擇左邊的"圖標(biāo)→1→1030",然后右鍵單擊"1030"項,,選擇"替換資源...",。如下圖7.16所示,在彈出窗口中單擊"打開新圖標(biāo)文件",,選擇一個滿意的圖標(biāo),,然后單擊"替換"按鈕,。 附注:圖標(biāo)文件可以是exe、dll,、res,、ico,該軟件可以從exe,、dll,、res抽取出圖標(biāo),本例選擇的是java的一個圖標(biāo)文件JavaCup.ico,。 圖7.16 選擇圖標(biāo)文件 (4)如下圖7.17所示,,選擇"文件→另存為",取名myswt.exe,。 附注:按理說選擇"保存"也是可以的,,這時Resource Hacker會將老的launch.exe備份成launch_original.exe。但也許是刷新上有問題,,用"保存"方式有時launch.exe無法顯示出新圖標(biāo),,但有時又可以。 圖7.17 保存修改 (5)最后的目錄如下圖7.18所示,,可見myswt.exe(也就是launch.exe改了個名稱)的圖標(biāo)換成了Java的圖標(biāo),。雙擊myswt.exe即可運(yùn)行Java應(yīng)用程序。 圖7.18 最后的效果 3,、最后的打包 發(fā)送給用戶之前,,通常要用WinZip或WinRAR將所有的文件全部打成一個壓縮包,然后用戶得到這個壓縮包后,,將其解壓縮后即可運(yùn)行程序,,Eclipse軟件就是這種方式。 另一種方式是用InstallShield,、InstallAnyWhere這樣的安裝程序制作軟件來創(chuàng)建一個單一的setup.exe文件,,它具有向?qū)降陌惭b界面,而且還可以往windows的程序欄插入菜單項,,關(guān)于這些安裝程序制作軟件的具體使用請參閱相關(guān)書籍,。 |
|