前篇已經講過,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
目標。 - 直接在命令列指定要執行的外掛目標,例如
mvn archetype: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執行操作
IDEA Maven執行操作 都要選擇在執行的專案的pom檔案目錄