大家都知道一個java應用項目可以打包成一個jar,當然你必須指定一個擁有main函數的main class作為你這個jar包的程序入口。
具體的方法是修改jar包內目錄META-INF下的MANIFEST.MF文件。
比如有個叫做test.jar的jar包,里面有一個擁有main函數的main class:test.someClassName
我們就只要在MANIFEST.MF里面添加如下一句話:
Main-Class: test.someClassName
然后我們可以在控制台里輸入java -jar test.jar即可以運行這個jar。
但是我們這個項目需要引用其他第三方的jar包,在eclipse里面以項目jar包的形式引用了這個叫做some.jar的包,當時放在項目的lib子目錄下,最后項目打包時把這個some.jar也打進來了,但是用java -jar執行這個test.jar的時候報找不到Class異常,原因就是jar引用不到放在自己內部的jar包。
那怎么辦?
運行時將其加入classpath的方式行不行?就是在運行jar的同時加入classpath參數:
java -classpath some.jar -jar test.jar
這種方式應該能解決問題吧,試一下,還是不行。
查了下資料,原來使用java -jar 命令運行jar包時classpath參數將會失效,所以,這種方式也不行。
那該怎么引用其他的jar包呢,答案還是在這個目錄META-INF下的MANIFEST.MF文件中。jar包引用其他jar包的信息必須在這個文件中聲明。
我們在MANIFEST.MF中添加如下代碼:
Class-Path: lib/some.jar
lib是和test.jar同目錄的一個子目錄,test.jar要引用的some.jar包就在這里面。
然后測試運行,一切正常!
如果有多個jar包需要引用的情況:
Class-Path: lib/some.jar lib/some2.jar
每個單獨的jar用空格隔開就可以了。
總結:不管怎么樣,只要想辦法在執行test.jar之前把需要引用的jar導入classpath就可以。你甚至可以把需要引用的包都放到jre/lib/ext目錄下,這樣jvm一啟動,這些包就加載了。
