Maven自身指定定義了一套對項目進行編譯,測試,打包,運行,部署等工做的抽象。Maven本身是不實際負責這些工做的,而是把它們交給了插件。因此Maven命令的實際工做執行者是各類各樣的插件。html
要了解Maven命令,還得知道Maven生命週期的概念。Maven有三套獨立的生命週期:clean, default和site。每一個生命週期又有不一樣的階段。這三個生命週期之間是互相獨立的,調用一個不會影響另外一個。可是生命週期內部各個階段之間倒是有先後依賴關係:必須先執行前面的階段,才能夠執行下一階段。java
clean生命週期的目的是清理項目,包含三個階段:程序員
若是我如今要執行clean,那麼必須先執行pre-clean。(只要告訴Maven你想要作的最後的目標就能夠了,Maven會自動執行改目標以前的全部階段)apache
default生命週期定義了真正構建時所須要執行的全部步驟,有以下階段tomcat
好吧,default生命週期多了一點,仍是同樣,若是想要執行deploy,那麼Maven會自動把deploy前面全部的階段都執行一遍,可是永遠不會執行clean生命週期的任何東西。因此咱們能夠理解如這樣的命令:服務器
mvn clean compilemaven
意思是先執行到clean生命週期的clean階段,再執行到default生命週期的compile階段。post
site生命週期的目的是創建和發佈項目站點,有以下階段測試
執行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)