在java應用開發中,編譯完java 檔案生成類檔案,可以在指令行用java指令運作,但是這樣很麻煩,因為一般的java 程式都不是獨立的應用,都會引用一些其他的jar 包,是以為了每次使用的友善,是好打包成exe或bat 的方式。
以下是一種實作方式,不需要借助于任何的工具。
一、在eclipse中把需要打包的類編譯成class檔案
二、在類的根檔案夾下建立一個檔案MANIFEST.MF、建立一個檔案夾lib,把你所引用的其他jar包拷由到lib中,
其目錄結構如下
+bin
-----MANIFEST.MF
-----lib
+引用的包一
+引用的包二
-----com(編譯後的類目錄)
--smartdot
--cip
--類一
--類二
MANIFEST.MF介紹:包含了JAR檔案的内容描述,并在運作時向JVM提供應用程式的資訊,大多數JAR檔案含有一個預設生成的manifest 檔案,在這裡我們主要利用這個檔案指定運作時的main class,以及main class 運作時需要引用的jar包.
其内容為:
Manifest檔案代碼
Main-Class: com.smartdot.expinitdata.ExportCIPData
Class-Path: ./lib/ChineseTransform.jar ./lib/classes12.jar ./lib/commons-lang-2.1.jar ./lib/commons-logging.jar ./lib/j2ee.jar ./lib/ojdbc14.jar
Manifest-Version: 1.0
MANIFEST.MF檔案經常會出錯,例如把Class-Path 放最到後一行,生成的jar檔案中的MANIFEST.MF中就沒有Class-Path,網上很多人問這個問題,但是都沒有找到出問題的原因,解決方式是把Class-Path寫到Manifest-Version上面就可以了,有時間去java 英文文檔上找原因吧。
上面的MANIFEST.MF指定的class-path是根據第二步的檔案結構中lib的存放位置指定的,當然也可以修改。
三、在指令行中執行打jar包
Java代碼
jar cvfm init.jar MANIFEST.MF com
當然,需要把目前目錄指到第二步的bin 下,即class檔案的根目錄下
剛開始我用的是jar cvfm init.jar MANIFEST.MF com/. 這個指令,生的JAR中的目錄有問題,com的下級目錄名前總帶一個/. , 是以總說找不到main class,删掉“/.”就好了。
四、編寫bat 檔案
bat 檔案很簡單,隻需要3句,将目前的路徑指定到編譯後的jar 包是以在目錄,運作java
Dos代碼
cd e:/patentOfficeData/bin
java -jar init.jar
pause
在我的了解中,生成的jar 中應該可以輕按兩下運作,而不用再編寫bat檔案,但是輕按兩下jar包後,可以啟動一個java 程序,但是看不到運作的界面,和輸出的語句,是我的了解有誤?
五、移植
如果想在其他機器上運作這個main class , 則需要建立一個檔案夾,裡面需要3個檔案
-----檔案夾
+打完的jar檔案
+lib目錄(存放引用的jar)
+bat檔案
隻要拷貝這個大的檔案夾就可以了。
有一點要注意,移植時,新機器的目錄e:/patentOfficeData/bin目錄必須存在,否則會報錯。是以建議一開始打包就找一個比較簡單的路徑作為類的根路徑。