其實,為了自己的便利將別人發布的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裏面.必須寫上妳要使用的類. 否則總會提示您編譯出錯.