Maven 命令

f1uLove發表於2018-11-03

前篇已經講過,Maven本質上是一個外掛框架,並不執行任何具體的構建任務,它把所有這些任務都交給外掛來完成。

作為開發利器的maven,為我們提供了十分豐富的命令,瞭解maven的命令列操作並熟練運用常見的maven命令還是十分必要的,即使譬如IDEA等工具給我提供了圖形介面化工具,但其底層還是依靠maven命令來驅動的。因此,知其然,知其所以然,方能百戰不殆。

Maven的命令格式如下:

mvn [plugin-name]:[goal-name]
複製程式碼

該命令的意思是:執行plugin-name外掛的goal-name目標。

使用者可以通過兩種方式呼叫Maven外掛的目標:

  1. 將外掛目標與生命週期階段lifecycle phase繫結,這樣使用者在命令列只是輸入生命週期階段而已,例如Maven預設將maven-compiler-plugincompile目標與compile生命週期階段繫結,因此命令mvn compile實際上是先定位到compile這一生命週期階段,然後再根據繫結關係呼叫maven-compiler-plugincompile目標。
  2. 直接在命令列指定要執行的外掛目標,例如mvn archetype:generate就表示呼叫maven-archetype-plugingenerate目標,這種帶冒號的呼叫方式與生命週期無關。

###常用命令

命令 描述
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定義了各個環境的變數idfilters中定義了變數配置檔案的地址,其中地址中的環境變數就是上面profile中定義的值,resources中是定義哪些目錄下的檔案會被配置檔案中定義的變數替換。

通過maven可以實現按不同環境進行打包部署,命令為:

mvn package -P dev
複製程式碼

其中dev為環境的變數id,代表使用Id為devprofile

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
複製程式碼

後面的三個引數用於指定專案的groupIdartifactId以及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檔案目錄

相關文章