Maven 命令
前篇已經講過,Maven本質上是一個外掛框架,並不執行任何具體的構建任務,它把所有這些任務都交給外掛來完成。
作為開發利器的maven,為我們提供了十分豐富的命令,瞭解maven的命令列操作並熟練運用常見的maven命令還是十分必要的,即使譬如IDEA等工具給我提供了圖形介面化工具,但其底層還是依靠maven命令來驅動的。因此,知其然,知其所以然,方能百戰不殆。
Maven的命令格式如下:
mvn [plugin-name]:[goal-name]
該命令的意思是:執行 plugin-name
外掛的 goal-name
目標。
使用者可以通過兩種方式呼叫Maven外掛的目標:
- 將外掛目標與生命週期階段
lifecycle phase
繫結,這樣使用者在命令列只是輸入生命週期階段而已,例如Maven預設將maven-compiler-plugin
的compile
目標與compile
生命週期階段繫結,因此命令mvn compile
實際上是先定位到compile
這一生命週期階段,然後再根據繫結關係調用maven-compiler-plugin
的compile
目標。 - 直接在命令列指定要執行的外掛目標,例如
mvnarchetype:generate
就表示呼叫maven-archetype-plugin
的generate
目標,這種帶冒號的呼叫方式與生命週期無關。
常用命令
命令 | 描述 |
---|---|
mvn –version | 顯示版本資訊 |
mvn clean | 清理專案生產的臨時檔案,一般是模組下的target目錄 |
mvn compile | 編譯原始碼,一般編譯模組下的src/main/java目錄 |
mvn package | 專案打包工具,會在模組下的target目錄生成jar或war等檔案 |
mvn test | 測試命令,或執行src/test/java/下junit的測試用例. |
mvn install | 將打包的jar/war檔案複製到你的本地倉庫中,供其他模組使用 |
mvn deploy | 將打包的檔案釋出到遠端參考,提供其他人員進行下載依賴 |
mvn site | 生成專案相關資訊的網站 |
mvn eclipse:eclipse | 將專案轉化為Eclipse專案 |
mvn dependency:tree | 打印出專案的整個依賴樹 |
mvn archetype:generate | 建立Maven的普通java專案 |
mvn tomcat:run | 在tomcat容器中執行web應用 |
mvn jetty:run | 呼叫 Jetty 外掛的 Run 目標在 Jetty Servlet 容器中啟動 web 應用 |
注意:執行maven命令的時候,首先需要定位到maven專案的目錄,也就是專案的pom.xml檔案所在的目錄。否則,必以通過引數來指定專案的目錄。
命令引數
上面列舉的只是比較通用的命令,其實很多命令都可以攜帶引數以執行更精準的任務。
Maven命令可攜帶的引數型別如下:
1. -D 傳入屬性引數
比如命令:
mvn package -Dmaven.test.skip=true
以 -D
開頭,將 maven.test.skip
的值設為 true
,就是告訴maven打包的時候跳過單元測試。同理, mvn deploy-Dmaven.test.skip=true
代表部署專案並跳過單元測試。
2. -P 使用指定的Profile配置
比如專案開發需要有多個環境,一般為開發,測試,預發,正式4個環境,在pom.xml中的配置如下:
<profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>qa</id> <properties> <env>qa</env> </properties> </profile> <profile> <id>pre</id> <properties> <env>pre</env> </properties> </profile> <profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> </profiles> ...... <build> <filters> <filter>config/${env}.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> ...... </build>
profiles
定義了各個環境的變數 id
, filters
中定義了變數配置檔案的地址,其中地址中的環境變數就是上面 profile
中定義的值, resources
中是定義哪些目錄下的檔案會被配置檔案中定義的變數替換。
通過maven可以實現按不同環境進行打包部署,命令為:
mvn package -P dev
其中 dev
為環境的變數id,代表使用Id為 dev
的 profile
。
3. -e 顯示maven執行出錯的資訊
4. -o 離線執行命令,即不去遠端倉庫更新包
5. -X 顯示maven允許的debug資訊
6. -U 強制去遠端更新snapshot的外掛或依賴,預設每天只更新一次
maven命令例項
下面結合幾個例項來看看maven命令的使用方法。
archetype:create & archetype:generate
archetype
是 原型
的意思,maven可以根據各種原型來快速建立一個maven專案。
archetype:create
是maven 3.0.5之前建立專案的命令,例如建立一個普通的Java專案:
mvn archetype:create -DgroupId=packageName -DartifactId=projectName -Dversion=1.0.0-SNAPSHOT
後面的三個引數用於指定專案的 groupId
、 artifactId
以及 version
。
建立Maven的Web專案:
mvn archetype:create -DgroupId=packageName -DartifactId=projectName -DarchetypeArtifactId=maven-archetype-webapp
archetypeArtifactId
引數用於指定使用哪個maven原型,這裡使用的是 maven-archetype-webapp
,maven會按照web應用的目錄結構生成專案。
需要注意的是,在maven 3.0.5之後,archetype:create命令不在使用,取而代之的是archetype:generate命令。
Eclipse Maven執行操作

eclipse
IDEA Maven執行操作

IDEA
都要選擇在執行的專案的pom檔案目錄