今天我們一起來(lái)聊一聊如何生成可運(yùn)行jar包,什么是可運(yùn)行jar包,他有什么特點(diǎn)呢?
這些問(wèn)題我們都會(huì)在以下的內(nèi)容中給大家一一解答,好了,我們開(kāi)始這個(gè)內(nèi)容的學(xué)習(xí)吧!
可運(yùn)行jar包
首先我們來(lái)看看什么是可運(yùn)行jar包,所謂可運(yùn)行jar包就是可以直接通過(guò)以下命令執(zhí)行的jar包文件:
java -jar xxx.jar
上述命令中,我們可以看到命令行中無(wú)需指定啟動(dòng)類(lèi),也無(wú)需指定依賴包,然后就可以自動(dòng)的運(yùn)行了,這樣的jar包就是可運(yùn)行jar包。
如果你熟悉Spring Boot自然知道Spring Boot打包出來(lái)的jar包就是一個(gè)可運(yùn)行jar,但如果不使用Spring Boot你能自己創(chuàng)建一個(gè)可運(yùn)行jar包嗎?
普通jar
我們?cè)賮?lái)看看普通jar的情況,沒(méi)有對(duì)比就沒(méi)有傷害,我們只有知道了兩者的區(qū)別,才能知道其本質(zhì)。
如果你使用maven,選擇目標(biāo)為jar,不使用Spring Boot的情況下,當(dāng)你通過(guò)mvn將其打包后是一個(gè)普通jar包,這個(gè)jar包是不能直接運(yùn)行的?
你如果運(yùn)行會(huì)發(fā)現(xiàn)如下錯(cuò)誤:
xxx.jar中沒(méi)有主清單屬性
很明顯我們需要通過(guò)某種方式告訴程序啟動(dòng)時(shí)要首先執(zhí)行哪個(gè)類(lèi)?也就是執(zhí)行哪個(gè)類(lèi)的main方法?
基于idea生成可運(yùn)行jar
使用idea創(chuàng)建一個(gè)普通項(xiàng)目,不要求是maven項(xiàng)目,新建一個(gè)含main方法的類(lèi)。
接下來(lái)就是使用idea自帶的Artifacts功能生成可運(yùn)行jar包的步驟:
-
打開(kāi)項(xiàng)目設(shè)置視圖,選擇artifacts-->JAR --> from modules with dependencies...
image-20200212225245733.png -
設(shè)置jar包的主類(lèi)為含有main方法的類(lèi),注意MANIFEST.MF的路徑需要去掉默認(rèn)的main\java,也就是放在src根目錄下,否則會(huì)提示找不到清單文件
image-20200212225833514.png -
注意查看jar包的輸出目錄,最終生成的jar會(huì)在該路徑下
image-20200212225920525.png -
選擇build菜單,點(diǎn)擊build artifacts子菜單
image-20200212230034709.png -
在彈出的菜單中選擇要打包的artifacts
image-20200212230108322.png
然后即可查看輸出目錄下生成的jar包,該jar包即為可運(yùn)行jar。
通過(guò)命令運(yùn)行之
java -jar regularjardemo.jar
就可以看到main方法正常執(zhí)行了。
手動(dòng)方式
其實(shí)仔細(xì)對(duì)比普通jar和可運(yùn)行jar,你會(huì)發(fā)現(xiàn)這兩個(gè)jar的區(qū)別就在于一個(gè)有MANIFEST.MF文件,一個(gè)沒(méi)有,這個(gè)就是可運(yùn)行jar的秘密。
只需要在jar文件中添加META-INF\MANIFEST.MF文件,這個(gè)MANIFEST.MF文件是一個(gè)properties文件,其中有一個(gè)Main-Class的字段,只需要將你要運(yùn)行的主類(lèi)的全類(lèi)名寫(xiě)在此處就可以實(shí)現(xiàn)可運(yùn)行jar了。
以上就是關(guān)于可運(yùn)行jar包的知識(shí)了,如果你有什么問(wèn)題或者疑問(wèn)可以在評(píng)論區(qū)留言,我會(huì)及時(shí)為你解答!




