天天看點

将java 打包成exe 可執行檔案

在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目錄必須存在,否則會報錯。是以建議一開始打包就找一個比較簡單的路徑作為類的根路徑。