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

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

要了解Maven命令,還得知道Maven生命週期的概念。Maven有三套獨立的生命週期:clean, default和site。每一個生命週期又有不一樣的階段。這三個生命週期之間是互相獨立的,調用一個不會影響另外一個。可是生命週期內部各個階段之間倒是有先後依賴關係:必須先執行前面的階段,才能夠執行下一階段。java

clean生命週期的目的是清理項目,包含三個階段:程序員

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

  若是我如今要執行clean,那麼必須先執行pre-clean。(只要告訴Maven你想要作的最後的目標就能夠了,Maven會自動執行改目標以前的全部階段)apache

default生命週期定義了真正構建時所須要執行的全部步驟,有以下階段tomcat

  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 compilemaven

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

site生命週期的目的是創建和發佈項目站點,有以下階段測試

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

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

 

插件及其目標

  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

相關文章
相關標籤/搜索