Maven 命令格式及一些常用命令


Maven自身指定定義了一套對項目進行編譯,測試,打包,運行,部署等工作的抽象。Maven自己是不實際負責這些工作的,而是把它們交給了插件。所以Maven命令的實際工作執行者是各種各樣的插件。

要了解Maven命令,還得知道Maven生命周期的概念。Maven有三套獨立的生命周期:clean, default和site。每個生命周期又有不同的階段。這三個生命周期之間是互相獨立的,調用一個不會影響另一個。但是生命周期內部各個階段之間卻是有前后依賴關系:必須先執行前面的階段,才可以執行下一階段。

clean生命周期的目的是清理項目,包含三個階段:

  • pre-clean:
  • clean:清理上一次構建生成的文件
  • post-clean:

  如果我現在要執行clean,那么必須先執行pre-clean。(只要告訴Maven你想要做的最后的目標就可以了,Maven會自動執行改目標之前的所有階段)

default生命周期定義了真正構建時所需要執行的所有步驟,有如下階段

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources
  5. generate-resources
  6. process-resources
  7. compile
  8. process-classes
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile
  14. process-test-classes
  15. test
  16. prepare-package
  17. package
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install
  23. deploy

 好吧,default生命周期多了一點,還是一樣,如果想要執行deploy,那么Maven會自動把deploy前面所有的階段都執行一遍,但是永遠不會執行clean生命周期的任何東西。所以我們可以理解如這樣的命令:

   mvn clean compile

意思是先執行到clean生命周期的clean階段,再執行到default生命周期的compile階段。

site生命周期的目的是建立和發布項目站點,有如下階段

  1. pre-site
  2. site
  3. post-site
  4. site-deploy

 執行maven命令的最主要的方式就是調用Maven的生命周期的階段。再提一遍:Maven各個生命周期之間互相獨立,而每個生命周期內部是有前后依賴關系的。

 

插件及其目標

  Maven的工作是插件完成的,插件自己也有自己的目的,並且還不是一個目的。以插件maven-dependency-plugin為例,它有十多個目標,如:dependency:list,dependency:analyze,dependency:tree等等。(這種寫法是一種通用的寫冒號前面是插件的前綴,后面是插件的目標)

 

Maven生命周期與插件目標互相綁定

  例如項目編譯這個任務,對應maven default生命周期的compile階段。而maven-compiler-plugin有一個目標compile能夠完成這個任務。那么只要將他們綁定,就能夠完成任務了。

  好了,那么我們應該執行命令: mvn compiler:compile來進行編譯了。可是那樣子得寫一段比較長的命令。還好maven有一些內置綁定,我們直接寫生命周期的某個階段,maven自己知道要調用哪個插件,執行到哪個目標。如下的內置綁定:

  clean生命周期內只有一個階段有綁定: clean階段綁定了 maven-clean-plugin:clean。 那么我們寫mvn clean時,maven才知道要調用maven-clean-plugin:clean

     site生命周期有兩個:site階段綁定maven-site-plugin:site ;site-deploy階段綁定maven-site-plugin:deploy

   default生命周期比較復雜,還要根據打包類型來決定綁定那個插件的那個目標。

 那么我們現在在回過頭來再看命令 mvn clean deploy ,就會后更深的解釋了:首先還是告訴maven,我要執行到clean階段,那么maven會找內置綁定,發現clean是與 maven-clean-plugin:clean綁定的,那么maven就會調用maven-clean-plugin:clean;接下來告訴maven,我要執行到deploy階段,還是一樣,maven發現該階段與maven-deploy-plugin:deploy綁定了,那么maven就會調用該插件了。

如果maven找不到綁定,那就會什么都不干。

 如果你是個牛逼的程序員,覺得maven-clean-plugin這個插件寫的太挫了,自己寫了個插件,怎么使用呢?就是接下來的自定義綁定了。

 

自定義綁定

  先寫個插件,那是必須的了。接下來在pom.xml文件中,build的子元素plugins中配置插件如下:

 1             <plugin>
 2                 <groupId>org.apache.maven.plugins</groupId>
 3                 <artifactId>maven-source-plugin</artifactId>
 4                 <version>2.1.1</version>
 5                 <executions>
 6                     <execution>
 7                         <phase>verify</phase>
 8                         <goals>
 9                             <goal>jar-no-fork</goal>
10                         </goals>
11                     </execution>
12                 </executions>
13             </plugin>

意思是 verify階段綁定到 maven-source-plugin:jar-no-fork目標。那么執行 mvn verify是就會執行 maven-source-plugin:jar-no-fork

命令行配置插件參數

  mvn test -Dmaven.test.skip=true

  記住 -Dxxx是java設置參數的方式。

 到這里就該差不懂明白了,壓根就不需要記住所謂的maven常用命令。 用mvn 階段名 大體上能夠滿足編譯,測試的要求。

 但是為了簡便,還是寫一下:

 mvn clean compile  編譯

 mvn clean test 測試

 mvn clean package 打包

 mvn clean install 把生成的jar/war包復制到本地repository(就是~/.m2/repository下面)

 mvn clean deploy 把生成的jar/war包發送到遠程repository(建議配置了私服,那就是往私服發送了)

mvn cargo:run 通過cargo插件,把生成的war包部署到本地服務器,並啟動。(注意要先運行 mvn clean package 打包)

mvn cargo:redeploy 通過cargo插件,把生成的war包部署到遠程服務器:如果已經有了,就先undeploy再deploy,如果沒有直接deploy(注意要先運行 mvn clean package 打包,並且遠程服務器是啟動的)(怎么配置看Maven Cargo 遠程不是到tomcat7x


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM