java打jar包,引用其他.jar文件
大家都知道一個(gè)java應(yīng)用項(xiàng)目可以打包成一個(gè)jar,當(dāng)然你必須指定一個(gè)擁有main函數(shù)的main class作為你這個(gè)jar包的程序入口。
?
具體的方法是修改jar包內(nèi)目錄META-INF下的MANIFEST.MF文件。
?
比如有個(gè)叫做test.jar的jar包,里面有一個(gè)擁有main函數(shù)的main class:test.someClassName
我們就只要在MANIFEST.MF里面添加如下一句話:
Main-Class: test.someClassName
?
然后我們可以在控制臺里輸入java -jar test.jar即可以運(yùn)行這個(gè)jar。
?
但是我們這個(gè)項(xiàng)目需要引用其他第三方的jar包,在eclipse里面以項(xiàng)目jar包的形式引用了這個(gè)叫做some.jar的包,當(dāng)時(shí)放在項(xiàng)目的lib子目錄下,最后項(xiàng)目打包時(shí)把這個(gè)some.jar也打進(jìn)來了,但是用java -jar執(zhí)行這個(gè)test.jar的時(shí)候報(bào)找不到Class異常,原因就是jar引用不到放在自己內(nèi)部的jar包。
?
那怎么辦?
?
運(yùn)行時(shí)將其加入classpath的方式行不行?就是在運(yùn)行jar的同時(shí)加入classpath參數(shù):
java -classpath some.jar -jar test.jar
?
這種方式應(yīng)該能解決問題吧,試一下,還是不行。
查了下資料,原來使用java -jar 命令運(yùn)行jar包時(shí)classpath參數(shù)將會(huì)失效,所以,這種方式也不行。
?
那該怎么引用其他的jar包呢,答案還是在這個(gè)目錄META-INF下的MANIFEST.MF文件中。jar包引用其他jar包的信息必須在這個(gè)文件中聲明。
?
我們在MANIFEST.MF中添加如下代碼:
Class-Path: lib/some.jar
?
lib是和test.jar同目錄的一個(gè)子目錄,test.jar要引用的some.jar包就在這里面。
然后測試運(yùn)行,一切正常!
?
如果有多個(gè)jar包需要引用的情況:
Class-Path: lib/some.jar lib/some2.jar
每個(gè)單獨(dú)的jar用空格隔開就可以了。
?
?
?
?
?
打jar包:
?
?
JDK中自帶了jar命令,可以生成jar包,在命令行輸入jar可以看到用法。
E:\20121008>jar
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file
s ...
選項(xiàng)包括:
??? -c? 創(chuàng)建新的歸檔文件
??? -t? 列出歸檔目錄
??? -x? 解壓縮已歸檔的指定(或所有)文件
??? -u? 更新現(xiàn)有的歸檔文件
??? -v? 在標(biāo)準(zhǔn)輸出中生成詳細(xì)輸出
??? -f? 指定歸檔文件名
??? -m? 包含指定清單文件中的清單信息
??? -e? 為捆綁到可執(zhí)行 jar 文件的獨(dú)立應(yīng)用程序
??????? 指定應(yīng)用程序入口點(diǎn)
??? -0? 僅存儲;不使用任何 ZIP 壓縮
??? -M? 不創(chuàng)建條目的清單文件
??? -i? 為指定的 jar 文件生成索引信息
??? -C? 更改為指定的目錄并包含其中的文件
如果有任何目錄文件,則對其進(jìn)行遞歸處理。
清單文件名、歸檔文件名和入口點(diǎn)名的指定順序
與 "m"、"f" 和 "e" 標(biāo)志的指定順序相同。
示例 1:將兩個(gè)類文件歸檔到一個(gè)名為 classes.jar 的歸檔文件中:
?????? jar cvf classes.jar Foo.class Bar.class
示例 2:使用現(xiàn)有的清單文件 "mymanifest" 并
?????????? 將 foo/ 目錄中的所有文件歸檔到 "classes.jar" 中:
?????? jar cvfm classes.jar mymanifest -C foo/ .
?
?
總結(jié):不管怎么樣,只要想辦法在執(zhí)行test.jar之前把需要引用的jar導(dǎo)入classpath就可以。你甚至可以把需要引用的包都放到j(luò)re/lib/ext目錄下,這樣jvm一啟動(dòng),這些包就加載了。
轉(zhuǎn)載于:https://www.cnblogs.com/yinzhidong/p/6124637.html
總結(jié)
以上是生活随笔為你收集整理的java打jar包,引用其他.jar文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net SignalR快速入门
- 下一篇: Angular模态框