背景java
Maven是一款很是流行的Java項目構建軟件,它集項目的依賴管理、測試用例運行、打包、構件管理於一身,是咱們工做的好幫手,maven飛速發展,它的發行版本也愈來愈多,若是咱們的項目是基於Maven構件的,那麼如何保證拿到咱們項目源碼的同事的Maven版本和咱們開發時的版本一致呢,可能你認爲很簡單,一個公司嘛,規定全部的同事都用一個Maven版本不就萬事大吉了嗎?一個組織內部這是可行的,要是你開源了一個項目呢?如何保證你使用的Maven的版本和下載你源碼的人的Maven的版本一致呢,這時候mvnw就大顯身手了。git
mvnw全名是Maven Wrapper,它的原理是在maven-wrapper.properties文件中記錄你要使用的Maven版本,當用戶執行mvnw clean 命令時,發現當前用戶的Maven版本和指望的版本不一致,那麼就下載指望的版本,而後用指望的版原本執行mvn命令,好比剛纔的mvn clean。github
爲項目添加mvnw支持很簡單,有兩種方式:app
方法一:在Pom.Xml中添加Plugin聲明:maven
<plugin> <groupId>com.rimerosolutions.maven.plugins</groupId> <artifactId>wrapper-maven-plugin</artifactId> <version>0.0.4</version> </plugin>
這樣當咱們執行mvn wrapper:wrapper 時,會幫咱們生成mvnw.bat、mvnw、maven/maven-wrapper.jar、maven/maven-wrapper.properties這些文件。測試
而後咱們就可使用mvnw代替mvn命令執行全部的maven命令,好比mvnw clean packagespa
方法二:直接執行Goal(推薦使用這種)code
mvn -N io.takari:maven:wrapper -Dmaven=3.3.3表示咱們指望使用的Maven的版本爲3.3.3xml
產生的內容和第一種方式是同樣的,只是目錄結構不同,maven-wrapper.jar和maven-wrapper.properties在".mvn/wrapper"目錄下blog
使用的注意事項
一、因爲咱們使用了新的Maven ,若是你的settings.xml沒有放在當前用戶下的.m2目錄下,那麼執行mvnw時不會去讀取你原來的settings.xml文件
二、在mvnw.bat中有以下的一段腳本:if exist "%M2_HOME%\bin\mvn.cmd" goto init,意思是若是找到mvn.cmd就執行初始化操做,可是Maven早期版本不叫mvn.cmd,而是叫mvn.bat,因此會報"Error: M2_HOME is set to an invalid directory"錯誤,改爲你本地的maven的匹配後綴就行了。
測試工程:https://github.com/easonjim/5_java_example/tree/master/mvnw/testproject
參考:
https://github.com/takari/maven-wrapper(官網)
http://www.javacoder.cn/?p=759(以上內容轉自此篇文章)