1. 程式人生 > >Eclipse專案打包成jar

Eclipse專案打包成jar

關於Eclipse將Java APP專案打包成jar的問題 如何將寫完的Java程式碼打包?由於他的原始碼中使用了不少第三方的lib,因此有必要將lib也一併打包進去。他用Eclipse的Export功能直接打包到.jar檔案,第三方lib是打包進來了,可是使用的時候還是提示找不到相應的包。

其實,為了自己的便利將別人釋出的lib打包進自己project的包中不是一種合適的做法。這樣做之前務必要檢查一下對方的license,但不管是不是將對方的lib包括進來,既然自己的程式碼用到了,為了讓它們正常工作,指明哪些包在那是必不可少的。師弟其實需要一個MANIFEST.MF檔案,利用Eclipse生成jar檔案的時候,請不要讓其自動生成MANIFEST.MF,而是應當由你自己寫好一個MANIFEST.MF,然後告訴 Eclipse:請使用這個檔案。想了解細節,請閱讀SUN的這篇規範(VIA),或者是IBM網站上的這篇JAR檔案揭祕,偶這裡就不多寫了。

另外,Eclipse其實還有一個輸出到可執行jar的功能,該功能能夠幫你編寫合適的MANIFEST.MF檔案,幫你將你引用的第三方lib一併打包(注意license哦)。

第一:普通類匯出jar包,我說的普通類就是指此類包含main方法,並且沒有用到別的jar包。

1.在eclipse中選擇你要匯出的類或者package,右擊,選擇Export子選項;

2.在彈出的對話方塊中,選擇java檔案---選擇JAR file,單擊next;

3.在JAR file後面的文字框中選擇你要生成的jar包的位置以及名字,注意在Export generated class files and resources和Export java source files and resources前面打上勾,單擊next;

4.單擊兩次next按鈕,到達JAR Manifest Specification。注意在最底下的Main class後面的文字框中選擇你的jar包的入口類。單擊Finish,完成。

你可以在dos環境下,進入你的jar所在的目錄,執行 java -jar 名字.jar,檢測執行是否正確。

第二、你所要匯出的類裡邊用到了別的jar包。比如說你寫的類連線了資料庫,用到資料庫驅動包oracl.jar.。

1.先把你要匯出的類按照上面的步驟匯出形成jar包,比如叫test.jar

2.新建一個資料夾main,比如在D盤根目錄下;

3.把test.jar和oracl.jar拷貝到main檔案下,右擊test.jar,解壓到當前資料夾。把META-INF\MANIFEST.MF剪下到另外一個地方 (比如是桌面!) ;

4.右擊oracl.jar,解壓到當前資料夾。

5.在dos環境下,進入到D盤的main資料夾下,執行 jar cvfm new.jar meta-inf/manifest.mf .

,不要忘了最後面的點。

6.用壓縮工具開啟你新生成的new.jar,用你放在桌面的META-INF\MANIFEST.MF覆蓋new.jar原有。

你可以在dos環境下,進入你的jar所在的目錄,執行 java -jar 名字.jar,檢測執行是否正確。

關於 MANIFEST.MF 寫法.

例如我們打包的jar為 Test.jar

Manifest-Version: 1.0
Main-Class: windows.VideoWindow
Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar


上面為打包為jar中的包說明檔案. 下面這個報錯一直出現.
could not find main class. Program will exit
這個錯誤提示其實不是沒有發現main class. 而是jar如果有錯誤執行不了,就會出現這個錯誤. 打包完成後, 要先執行 cmd -> java -jar your.jar 確認沒有問題即可執行jar. 使用-jar引數後, 系統的Classpath 變數不再起作用. 虛擬機器將去MANIFEST.MF中的Class-Path 下找相關的包.
然後才能成功的從: windows.VideoWindow 的main方法進入. 否則沒有相關連線包,則會提示找不到main class. 而大家可能還迷糊的找不到北. 明明有main class嗎.


如果這個寫的不對. 則就會一直報錯.
看看上面這個Class-Path: 後面的寫法. 空格分開. 絕對不能有分號.切記.

最後必須有換行.

這個也是要注意的. 否則依然提示沒有mainclass.

不要因為這個小事情耽誤了時間. 其中 lib/ 表示這個jar必須在打包Test.jar所在目錄的一個lib子目錄中.

執行jar需要命令: java -jar Test.jar
雙擊也可以, 則使用 javaw 開啟.

關於java -classpath a.jar;b.jar; class test.Test 執行時. a.jar;b.jar; 後面都必須有分號. 否則報錯. 不要指望不寫classpath讓系統自己找. 這不是在eclipse裡面.必須寫上你要使用的類. 否則總會提示您編譯出錯.