新聞中心
maven是目前java項目中比較流行的構(gòu)建工具,特別是它提供的插件,如果使用得當(dāng),整個項目研發(fā)流程都將會受益,從而提高研發(fā)、測試和部署的效率。這里記錄幾個常用插件的用法,既方便自己日后回顧,也便于有興趣的同仁交流指正。各位實踐過程中如果發(fā)現(xiàn)有趣的插件或者更好的用法,也歡迎留言分享。

靖安網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),靖安網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為靖安上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的靖安做網(wǎng)站的公司定做!
Maven工程標(biāo)準(zhǔn)架構(gòu)
插件一 maven-resources-plugin
Maven可以區(qū)別對待Java代碼文件和資源文件,默認的主資源文件目錄是src/main/resources,我們可以通過這個插件實現(xiàn)資源文件過濾。資源文件過濾的意思是指我們可以在資源文件里用使用占位符${propertyName},然后開啟對資源文件的過濾,pom.xml里再統(tǒng)一設(shè)置所有{propertyName}對應(yīng)的值,就可以在構(gòu)建過程中將值替換掉資源文件中對應(yīng)的${propertyName},實現(xiàn)了代碼配置分離、做到了參數(shù)的統(tǒng)一維護。
示例用法
src/main/resources properties/*.properties true src/main/resources *.xml mapper/**/*.xml mysqlMapper/**/*.xml *.properties - ……
local
我們的主應(yīng)用集成后,會根據(jù)實際要求部署到不同的環(huán)境中,比如聯(lián)調(diào)環(huán)境、測試環(huán)境、壓力環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境等,而這些環(huán)境上的資源配置信息顯然是不一樣的,針對每套環(huán)境,每個具體占位符${propertyName}都會有不同的值,而這種場景可以使用Maven的profile來支持,每個profile都可以獨立維護一套參數(shù)值,在mvn package的時候靈活指定;此外,maven也支持在package的時候指定多個profile,這個特性在執(zhí)行自動部署的時候特別有用。使用這個插件,我們的項目可以做到多環(huán)境支持,參考命令
- mvn package -Pnocheck,env-test
示例用法
nocheck true true true true true local true local env-test env-test
插件二 maven-jar-plugin
當(dāng)我們將項目模塊化后,有一些通用的資源文件基本上大多數(shù)模塊都會用到,比如log4j.properties,jdbc.properties等,模塊中有了這些資源文件,我們才能單獨對該模塊進行開發(fā)、調(diào)試。默認情況下maven-jar-plugin會將這些資源文件全部package成一個jar包進行發(fā)布,如果這樣的jar包集成到一個主應(yīng)用中部署,運行,很可能導(dǎo)致主應(yīng)用的配置不生效,我稱之為配置混亂,為了解決這個問題,可以開啟maven-jar-plugin的排除功能,在執(zhí)行mvn package之前排除指定的資源文件。
示例用法
org.apache.maven.plugins maven-jar-plugin applicationContext.xml properties/** log4j.properties
插件三 maven-war-plugin
項目如果是web主應(yīng)用,我們可以使用maven-war-plugin來對webapps下各類文件進行過濾。用法參考maven-resources-plugin
示例用法
org.apache.maven.plugins maven-war-plugin demo-Rest src/main/webapp/WEB-INF true WEB-INF web.xml
插件四 properties-maven-plugin
隨著項目的不斷迭代,我們的資源配置項將會變得更多,這個會直接影響到pom.xml的體積膨脹;此外,如果項目目標(biāo)部署環(huán)境比較多,pom.xml將會膨脹得更快,更加難以維護。為了解決這個問題,我們需要將這些配置信息獨立出來,并按照不同環(huán)境進行歸類,使用properties-maven-plugin就會達到這個效果。
示例用法(將每個環(huán)境的信息放在不同的目錄下,然后在mvn package切換不同的profile實現(xiàn)去指定目錄讀取配置信息,用讀取到的value去替換資源配置文件的占位符)
org.codehaus.mojo properties-maven-plugin 1.0.0 profiles/${runtime.env}/jdbc.properties profiles/${runtime.env}/redis.properties profiles/${runtime.env}/batch.properties profiles/${runtime.env}/config.properties initialize read-project-properties
插件五 maven-assembly-plugin
Java項目中有一種類型的主應(yīng)用,是需要獨立部署在后臺啟動的,比如socket服務(wù)程序,比如定時調(diào)度程序,比如dubbo服務(wù)程序,這些程序理論上只需要執(zhí)行一個簡單的java命令即可;稍微復(fù)雜一些的,我們可以規(guī)范一下自己的主應(yīng)用結(jié)構(gòu),定義配置文件夾和依賴庫文件夾,再準(zhǔn)備啟動的批處理腳本sh或bat文件即可。使用maven-assembly-plugin就可以達到這種效果。
示例用法
org.apache.maven.plugins maven-assembly-plugin false target/classes/package.xml make-assembly package single
附package.xml
- xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
package tar.gz true src/main/bin *.sh *.bat true 0755 ${basedir}/src/main/config *.properties log4j.xml config true 0644 ${basedir}/src/main/config log4j.dtd config 0644 lib runtime 0644
附示例生成的Java應(yīng)用結(jié)構(gòu)圖
插件六 maven-shade-plugin
有時候,我們需要將所有配置文件和依賴庫文件全部放在一個jar包中,運維的同事只需要執(zhí)行java -jar batch.jar即可完成啟動。雖然使用maven-assembly-plugin也可以做到這一點,但是在讀取配置文件的時候有可能會遇到一些問題,這個時候,我們可能需要使用到maven-shade-plugin這個插件,經(jīng)筆者實踐按照如下示例用法配置確實可用;當(dāng)然本示例配置了mainClass,直接執(zhí)行java -jar batch.jar確實沒問題,但如果執(zhí)行java com.fastjrun.demospring4.BatchInit -classpath batch.jar也是可以的。
示例用法
org.apache.maven.plugins maven-shade-plugin 3.0.0 package shade batch true jar-with-dependencies - implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
com.fastjrun.demospring4.BatchInit - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
META-INF/spring.handlers - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
META-INF/spring.schemas - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
META-INF/spring.tooling *:* META-INF/*.SF META-INF/*.DSA META-INF/*.RSA
插件七 versions-maven-plugin
當(dāng)項目模塊化后,我們會遇到一個問題,就是項目版本升級的時候,需要同時變更父模塊和所有子模塊中的版本號 ,而這是一個比較瑣碎且容易出錯的事情,還好maven考慮得很周到,提供了這樣一個插件,我們使用命令行就可以達到效果了。我們的項目視圖如下
參考命令如下
- mvn versions:set -DnewVersion=1.2-SNAPSHOT
總結(jié)
本文匯總了筆者常用的幾個插件及其用法,經(jīng)實踐,基于eclipse的kepler、luna版本都能很好支持maven-resources-plugin、maven-jar-plugin、maven-war-plugin和properties-maven-plugin使用,同時也支持profile的activeByDefault設(shè)置,研發(fā)同事在不需要任何調(diào)整的情況下就能直接開發(fā)、調(diào)試代碼,且在開發(fā)結(jié)束后,可以直接使用mvn命令打包,打出各個環(huán)境的部署程序。從開發(fā)、調(diào)試、測試、驗證到上線的整個過程,所有模塊的pom.xml直到下一個迭代變更版本前都不用修改,直接使用。
【本文為專欄作者“崔瑩峰”的原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】
戳這里,看該作者更多好文
當(dāng)前標(biāo)題:常用maven插件總結(jié)
文章出自:http://www.dlmjj.cn/article/dpgocec.html


咨詢
建站咨詢
