[[PageOutline]] = 製作 Executable JAR = 1. 產生出class檔 2. 編寫MANIFEST.MF檔,格式如 {{{ Manifest-Version: 1.0 Created-By: ant 1.4 Main-Class: com.example.myAppMain Class-Path: mail.jar activation.jar }}} 3. jar -cvfm "ANY_NAME".jar MANIFEST.MF ["檔1".."檔n" | "路徑" ] 4. java -jar "ANY_NAME".jar == 製作可執行JAR的注意事項 == * MANIFEST.MF 內的"Main-Class: "是唯一必要的欄位,其他可省略 * '''Main-Class: Main檔路徑''' :後的空格要注意 * '''com.example.myAppMain''' 代表 執行檔'''myAppMain.class'''放在 "/com/example/"資料夾內 * jar -cv'''fm''' 的 '''fm''' 順序不可搞混。 * java '''-'''jar 的 '''-''' 不可省略,否則報錯 == 初階小試 == '''0. 編程''' 指令: {{{ vim test.java }}} 內容: {{{ public class test{ public static void main(String[] args){ System.out.println("hello word"); } } }}} '''1. 編譯''' 指令: {{{ javac test.java }}} '''2. 執行文件''' 指令: {{{ vim MANIFEST.MF }}} 內容: {{{ Main-Class: test }}} '''3. 打包''' 指令: {{{ jar -cvfm test.jar MANIFEST.MF ./ }}} 執行畫面如下: {{{ 新增 manifest 新增︰MANIFEST.MF (讀=17)(寫=19)(壓縮 -11%) 新增︰test.class (讀=514)(寫=330)(壓縮 35%) }}} '''4. 執行''' 指令: {{{ java -jar test.jar }}} 執行畫面如下: {{{ hello word }}} == Eclipse 製成 JAR == '''0 run''' 程式需在Eclipse 上 run過,假設run完被紀錄的名稱為test '''1 製作JAR 檔''' 在Package Explorer 找到程式碼的專案資料夾,右鍵點選export => 打開'''Java'''類 -> '''Runnaable JAR file''' => '''Launch configuration''' -> "test" ;[[br]] '''Export destination'''->"隨便一個path" -> [[br]] '''Finish''' '''2 執行''' 假設我們將匯出的jar放在桌面上,名稱為test.jar 則要執行它則是: {{{ cd ~/Desktop java -jar test.jar }}} * [wiki:waue/Eclipse_Hadoop_JAR 用Eclipse製成可在Hadoop上運行MapReduce的jar檔] == 打包成exe檔工具 == reference from [http://www.lslnet.com/linux/f/docs1/i19/big5190449.htm 將Java程序作成exe文件的N種方法] || 名稱 || 介紹 || 說明 || 備註 || || JET || 一個優秀的Java語言本地編譯器 || 用javac生成test.class 然後用''' jc test.class+gui ''' || 加個參數+gui,只是不顯示dos窗口,而不是完全的可以獨立運行的exe,還是需要jre的 || || exe4j || 將Jar文件製作成exe文件,但需jre支持,也可將Jar文件放在外面。||http://www.ej-technologies.com/products/exe4j/overview.html ||共享軟件 || || jBuilder || JBuilder可以直接把工程製作成各系統的可執行文件,包括Windows系統。 || || 商業軟件 || || nativeJ || 與exe4j功能類似。 || http://www.dobysoft.com/products/nativej/download.html || 共享軟件 || || jshrink || 可將Jar文件打包進exe文件。同時具有混淆功能(這才是它的主要功能)。 || http://www.e-t.com/jshrink.html || 共享軟件 || || installAnywhere || 打包工具,對Java打包最好用。可打包成各操作系統運行包。包括Windows系統。 || http://www.zerog.com/ || 商業軟件 || || installShieldX || 與installAnywhere類似,但比installAnywhere功能強大。 || http://www.installshield.com || 商業軟件 || || izPack || Java 安裝程序製作工具,能夠製作一些簡單的安裝程序 || || 製作出來的安裝程序能在 Unix-like, MacOS X, Windows 等系統平台上運行。 || || sSmooth || 使用JSmooth將做好的JAR包裝成EXE。 || || || || launch4j || Java應用程序的Windows本地可執行文件 (.exe) 封裝器 || 提供了本地彈出屏幕,應用程序圖標,JRE搜索或使用綁定的JRE,啟動失敗反饋,傳遞命令行參數,ant腳本。 || || || vAInstall || 多平台的安裝程序。你要包裝起來的軟件可以是可執行的 java class, Windows .EXE, Linux 可執行檔,或者是 UNIX shell 檔案 || 可以選擇四種安裝的介面,graphic, xtra, text 或是 ansi || 只需要很少的空間,他不會使用任何大的暫存檔案,而且還可以很容易使用反安裝功能。 || || toolshed || 一個既小又簡單的JAVA安裝製作工具。 || || || || antInstaller || 通過XML文件定義UI,用Ant做後台。所以ANT所能做的事情antInstaller同樣也勝任。 || || || || freeInstaller || freeInstaller能夠把JAVA程序打包成的應用程序|| || 多種平台 || || setup2go || 是個很好用的安裝製作程序 || || 有中文版,完全免費 || == 詳細的圖文教學 == Reference by Java Gossip: [http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/ExecutableJAR.htm 製作 Executable JAR] 撰寫Java程式到這邊,相信您一定會有所疑問的是,編出來的.class檔案越來越多,難道要將這一堆.class檔案直接給想要執行程式的人嗎?在Windows下的話,有沒有辦法按一下檔案,就可以執行程式呢? 當然,實際上要交付程式時,並不是給一堆.class檔案,而是會將編譯好的.class檔包裝為一個Java Archive File,也就是副檔名為.jar的檔案,在JDK的bin目錄下,附帶有一個jar工具程式,您可以直接執行jar程式,看看它的提示訊息: [[Image(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-015.JPG)]] 直接執行jar工具程式,提示訊息中已清楚的說明如何使用jar程式,在這邊使用 文字編輯器製作 完成的文字編輯器為例,來示範如何將程式包裝為.jar的檔案,首先請建立一個jar目錄,並在其下建立bin與classes目錄,將您完成的文字編輯器程式放入classes中(包括套件的資料夾結構),待會將會產生的.jar則將放入bin中。 [[Image(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-016.JPG)]] 接著開啟文字模式,切換工作目錄至jar目錄下,然後鍵入以下的指令,表示將建立一個JNotePad.jar放到bin目錄中,來源是classes中的檔案,被放入的檔案將以/作為.jar檔案中的根目錄: [[Image(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-017.JPG)]] 接著您的bin目錄中就會產生一個JNotePad.jar,要如何使用這個.jar檔案呢?.jar檔案中包括.class,基本上可以將.jar看作是一個特別的目錄,所以要使用.jar檔案中的.class檔案時,基本上也是指定Classpath,例如: {{{ java -cp ./bin/JNotePad.jar onlyfun.caterpillar.JNotePad }}} 接著您的文字編輯器就會啟動了,現在您不用將一堆.class檔案交付出去,只要交付這個JNotePad.jar就可以了。 然而,真的要指定Classpath這麼麻煩嗎?其實還有更方便的做法,製作一個Executable Jar檔案,指定讀取.jar檔案時要執行的Main-Class就可以了,這需要準備一個manifest.txt,當中寫下: [[Image(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-018.JPG)]] 注意寫完Main-Class之後,要按下Enter鍵新增一行,在Windows下這個動作是必要的,否則會發生無法讀取Main-Class屬性的錯誤。假設manifest.txt放在jar目錄下,接著如下執行指令: [[Image(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-019.JPG)]] 在.jar檔案製作出來後,您可以在執行java時指定-jar引數,以及您的.jar檔案,java程式會自動尋找Main-Class並執行,例如下達以下的指令: {{{ java -jar bin/JNotePad.jar }}} 接著您的文字編輯器就會啟動了,如果您的作業系統是Windows,由於安裝完JRE之後,會將.jar預設由javaw程式開啟,所以您可以直接在JNotePad.jar檔案上,使用滑鼠左鍵按兩下直接開啟程式來執行。