Mvnw 簡介
背景
maven是一款非常流行的java項目構建軟件,它集項目的依賴管理、測試用例運行、打包、構件管理於一身,是我們工作的好幫手,maven飛速發展,它的發行版本也越來越多,如果我們的項目是基於maven構件的,那么如何保證拿到我們項目源碼的同事的maven版本和我們開發時的版本一致呢,可能你認為很簡單,一個公司嘛,規定所有的同事都用一maven版本不就萬事大吉了嗎?一個組織內部這是可行的,要是你開源了一個項目呢?如何保證你使用的maven的版本和下載你源碼的人的maven的版本一致呢,這時候mvnw就大顯身手了。
mvnw 全名是maven wrapper,它的原理是在maven-wrapper.properties文件中記錄你要使用的maven版本,當用戶執行mvnw clean 命令時,發現當前用戶的maven版本和期望的版本不一致,那么就下載期望的版本,然后用期望的版本來執行mvn命令,比如剛才的mvn clean。
為項目添加mvnw支持很簡單,有兩種方式:
方法一,在Pom.Xml中添加Plugin聲明:
<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 package
方法二,直接執行Goal
#表示我們期望使用的maven的版本為3.3.3 mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
產生的內容和第一種方式是一樣的,只是目錄結構不一樣,maven-wrapper.jar和maven-wrapper.properties在".mvn/wrapper"目錄下
使用的注意事項
1、由於我們使用了新的maven ,如果你的settings.xml沒有放在當前用戶下的.m2目錄下,那么執行mvnw時不會去讀取你原來的settings.xml文件
2、在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的匹配后綴就好了。