大家好,我是IT修真院深圳分院第01期學(xué)員,一枚正直純潔善良的web程序員盗棵。今天給大家分享一下,修真院官網(wǎng)JAVA(職業(yè))任務(wù)2的知識(shí)點(diǎn)——Maven常用打包插件的使用北发。
1.背景介紹
打包纹因,正式說(shuō)法是構(gòu)建項(xiàng)目軟件包,具體說(shuō)就是將項(xiàng)目中的各種文件琳拨,比如源代碼瞭恰、編譯生成的字節(jié)碼、配置文件狱庇、文檔寄疏,按照規(guī)范的格式生成歸檔,最常見(jiàn)的是JAR包和WAR包僵井。
2.知識(shí)剖析
2.1 關(guān)于package
任何一個(gè)Maven項(xiàng)目都需要定義POM元素packaging(如果不寫(xiě)則默認(rèn)值為jar)陕截。該元素決定了項(xiàng)目的打包方式。實(shí)際的情形中批什,如果你不聲明該元素农曲,Maven會(huì)幫你生成一個(gè)JAR包;如果你定義該元素的值為war,那你會(huì)得到一個(gè)WAR包乳规;如果定義其值為POM(比如是一個(gè)父模塊)形葬,那什么包都不會(huì)生成。
2.2 常規(guī)打包
maven項(xiàng)目常規(guī)的四種包:jar暮的、war笙以、source和javadoc,maven提供了對(duì)應(yīng)的插件:maven-jar-plugin冻辩、maven-war-plugin猖腕、maven-source-plugin和maven-javadoc-plugin。
2.3 可執(zhí)行jar包
Maven默認(rèn)生成的jar包只包含了編譯生成的.class文件和項(xiàng)目資源文件恨闪,而要得到一個(gè)可以直接在命令行通過(guò)java命令運(yùn)行的jar文件倘感,還要滿足兩個(gè)條件:
1)jar包中的/META-INF/MANIFEST.MF元數(shù)據(jù)文件必須包含Main-Class信息。
2)項(xiàng)目所有的依賴(lài)都必須在Classpath中咙咽。
有三種生成方式:
1)使用jar和dependency插件
2)使用shade插件
3)使用assembly插件
2.3 項(xiàng)目分發(fā)包
實(shí)際的軟件項(xiàng)目常常會(huì)有更復(fù)雜的打包需求老玛,例如我們可能需要為客戶(hù)提供一份產(chǎn)品的分發(fā)包,這個(gè)包不僅僅包含項(xiàng)目的字節(jié)碼文件钧敞,還得包含依賴(lài)以及相關(guān)腳本文件以方便客戶(hù)解壓后就能運(yùn)行蜡豹,此外分發(fā)包還得包含一些必要的文檔。
assembly插件支持各種打包文件格式溉苛,包括zip余素、tar.gz、tar.bz2等等炊昆,通過(guò)一個(gè)打包描述文件,能夠幫助用戶(hù)選擇具體打包哪些文件集合威根、依賴(lài)凤巨、模塊、和甚至本地倉(cāng)庫(kù)文件洛搀,每個(gè)項(xiàng)的具體打包路徑用戶(hù)也能自由控制敢茁。
assembly.xml文件的id對(duì)應(yīng)了其最終生成文件的classifier。
formats定義打包生成的文件格式留美。
dependencySets用來(lái)定義選擇依賴(lài)并定義最終打包到什么目錄彰檬。
fileSets允許用戶(hù)通過(guò)文件或目錄的粒度來(lái)控制打包。
3. 常見(jiàn)問(wèn)題
實(shí)際使用
4. 解決方案
在pom文件中配置插件
5. 編碼實(shí)戰(zhàn)
6. 擴(kuò)展思考
assembly插件對(duì)包含spring框架的項(xiàng)目打可運(yùn)行jar包會(huì)報(bào)錯(cuò)
7. 參考文獻(xiàn)
參考一:maven打包的技巧
參考二:maven官方文檔
8. 更多討論
其他格式的項(xiàng)目分發(fā)包
提問(wèn):用assembly插件打成分發(fā)包谎砾,里面的項(xiàng)目可以用IDE打開(kāi)直接運(yùn)行嗎逢倍?
答:可以
提問(wèn):可執(zhí)行jar包中的MANIFEST.MF文件可以手動(dòng)添加主類(lèi)信息嗎?
答:我用shade插件試了下景图,是可以的较雕,但是限制比較多。首先在pom中shade插件配置中注釋掉主類(lèi)入口配置,然后運(yùn)行打包亮蒋,將打出來(lái)的jar包用WinRAR打開(kāi)扣典,直接用sublime編輯MANIFEST.MF文件,添加主類(lèi)信息然后保存慎玖,關(guān)閉jar包贮尖,運(yùn)行成功。需要注意的是不能解壓jar包再編輯趁怔,否則會(huì)報(bào)錯(cuò)湿硝,應(yīng)該是解壓會(huì)破壞關(guān)聯(lián)關(guān)系。
提問(wèn):打包時(shí)怎樣跳過(guò)測(cè)試痕钢?
答:在configuration標(biāo)簽中加上<skip>true</skip>即可图柏,版本不同可能寫(xiě)法會(huì)有變化,或者用<skipTests>true</skipTests>任连。
鳴謝
感謝大家觀看
------------------------------------------------------------------------------------------------------------------------
今天的分享就到這里啦蚤吹,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)随抠、留言裁着、拍磚~