大家好,我是IT修真院深圳分院第01期學員,一枚正直純潔善良的web程序員。今天給大家分享一下,修真院官網JAVA(職業(yè))任務2的知識點——Maven常用打包插件的使用。
1.背景介紹
打包,正式說法是構建項目軟件包,具體說就是將項目中的各種文件,比如源代碼、編譯生成的字節(jié)碼、配置文件、文檔,按照規(guī)范的格式生成歸檔,最常見的是JAR包和WAR包。
2.知識剖析
2.1 關于package
任何一個Maven項目都需要定義POM元素packaging(如果不寫則默認值為jar)。該元素決定了項目的打包方式。實際的情形中,如果你不聲明該元素,Maven會幫你生成一個JAR包;如果你定義該元素的值為war,那你會得到一個WAR包;如果定義其值為POM(比如是一個父模塊),那什么包都不會生成。
2.2 常規(guī)打包
maven項目常規(guī)的四種包:jar、war、source和javadoc,maven提供了對應的插件:maven-jar-plugin、maven-war-plugin、maven-source-plugin和maven-javadoc-plugin。
2.3 可執(zhí)行jar包
Maven默認生成的jar包只包含了編譯生成的.class文件和項目資源文件,而要得到一個可以直接在命令行通過java命令運行的jar文件,還要滿足兩個條件:
1)jar包中的/META-INF/MANIFEST.MF元數據文件必須包含Main-Class信息。
2)項目所有的依賴都必須在Classpath中。
有三種生成方式:
1)使用jar和dependency插件
2)使用shade插件
3)使用assembly插件
2.3 項目分發(fā)包
實際的軟件項目常常會有更復雜的打包需求,例如我們可能需要為客戶提供一份產品的分發(fā)包,這個包不僅僅包含項目的字節(jié)碼文件,還得包含依賴以及相關腳本文件以方便客戶解壓后就能運行,此外分發(fā)包還得包含一些必要的文檔。
assembly插件支持各種打包文件格式,包括zip、tar.gz、tar.bz2等等,通過一個打包描述文件,能夠幫助用戶選擇具體打包哪些文件集合、依賴、模塊、和甚至本地倉庫文件,每個項的具體打包路徑用戶也能自由控制。
assembly.xml文件的id對應了其最終生成文件的classifier。
formats定義打包生成的文件格式。
dependencySets用來定義選擇依賴并定義最終打包到什么目錄。
fileSets允許用戶通過文件或目錄的粒度來控制打包。
3. 常見問題
實際使用
4. 解決方案
在pom文件中配置插件
5. 編碼實戰(zhàn)
6. 擴展思考
assembly插件對包含spring框架的項目打可運行jar包會報錯
7. 參考文獻
參考一:maven打包的技巧
參考二:maven官方文檔
8. 更多討論
其他格式的項目分發(fā)包
提問:用assembly插件打成分發(fā)包,里面的項目可以用IDE打開直接運行嗎?
答:可以
提問:可執(zhí)行jar包中的MANIFEST.MF文件可以手動添加主類信息嗎?
答:我用shade插件試了下,是可以的,但是限制比較多。首先在pom中shade插件配置中注釋掉主類入口配置,然后運行打包,將打出來的jar包用WinRAR打開,直接用sublime編輯MANIFEST.MF文件,添加主類信息然后保存,關閉jar包,運行成功。需要注意的是不能解壓jar包再編輯,否則會報錯,應該是解壓會破壞關聯關系。
提問:打包時怎樣跳過測試?
答:在configuration標簽中加上<skip>true</skip>即可,版本不同可能寫法會有變化,或者用<skipTests>true</skipTests>。
鳴謝
感謝大家觀看
------------------------------------------------------------------------------------------------------------------------
今天的分享就到這里啦,歡迎大家點贊、轉發(fā)、留言、拍磚~