wiki:waue/java_jar

製作 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 -cvfmfm 順序不可搞混。
  • 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" ;
Export destination->"隨便一個path" ->
Finish

2 執行

假設我們將匯出的jar放在桌面上,名稱為test.jar 則要執行它則是:

cd ~/Desktop
java -jar test.jar 

打包成exe檔工具

reference from 將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: 製作 Executable JAR

撰寫Java程式到這邊,相信您一定會有所疑問的是,編出來的.class檔案越來越多,難道要將這一堆.class檔案直接給想要執行程式的人嗎?在Windows下的話,有沒有辦法按一下檔案,就可以執行程式呢?

當然,實際上要交付程式時,並不是給一堆.class檔案,而是會將編譯好的.class檔包裝為一個Java Archive File,也就是副檔名為.jar的檔案,在JDK的bin目錄下,附帶有一個jar工具程式,您可以直接執行jar程式,看看它的提示訊息:

http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-015.JPG

直接執行jar工具程式,提示訊息中已清楚的說明如何使用jar程式,在這邊使用 文字編輯器製作 完成的文字編輯器為例,來示範如何將程式包裝為.jar的檔案,首先請建立一個jar目錄,並在其下建立bin與classes目錄,將您完成的文字編輯器程式放入classes中(包括套件的資料夾結構),待會將會產生的.jar則將放入bin中。 http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-016.JPG

接著開啟文字模式,切換工作目錄至jar目錄下,然後鍵入以下的指令,表示將建立一個JNotePad.jar放到bin目錄中,來源是classes中的檔案,被放入的檔案將以/作為.jar檔案中的根目錄:

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,當中寫下: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/images/J6-018.JPG

注意寫完Main-Class之後,要按下Enter鍵新增一行,在Windows下這個動作是必要的,否則會發生無法讀取Main-Class屬性的錯誤。假設manifest.txt放在jar目錄下,接著如下執行指令: 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檔案上,使用滑鼠左鍵按兩下直接開啟程式來執行。

Last modified 16 years ago Last modified on Feb 6, 2009, 4:11:25 PM