###lifecycle maven定義了生命週期lifecycle的概念,一個生命週期又分爲不少個階段,好比在packaging類型爲jar的工程下,執行mvn package
這個命令, 它會執行資源處理,編譯,打包等步驟(固然不止這三個步驟)。資源處理,編譯,打包這些步驟就稱之爲phase。關於lifecycle和phase的更多資料,能夠在官上網查到
http://maven.apache.org/components/ref/3-LATEST/maven-core/lifecycles.html
http://maven.apache.org/components/ref/3-LATEST/maven-core/default-bindings.html
###goal maven的功能是由plugin來完成的。通常的plugin都會包含多個功能,每一個功能都包含一個名稱,稱之爲goal, ###phase、plugin、goal關係 幾個關鍵的phase都會與特定的plugin的某個goal綁定,比較資源處理階段process-resources與插件maven-resources-plugin的resources進行了綁定,所以執行到process-resources階段時,maven將調用maven-resources-plugin插件,執行它的resources功能,拷貝資源文件。
###mvn compile與mvn compiler:compile 這兩個命令都會執行編譯過程,可是前者包含更多的執行步驟。 ###mvn compile
這裏的compile是指編譯階段,它會從初始階段一直執行到編譯階段.compile階段以前還有這些階段:
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
所以,mvn compile會執行以上各個階段所綁定的插件,默認狀況下,上面的階段中只有process-resources綁定了插件,即maven-resources-plugin, 因此這條命令會先拷貝資源文件,而後再去編譯, 即mvn compile隱式的調用了resources插件,即便沒有在pom.xml中定義resources插件。
###mvn compiler:compile
這條指令中,compiler是指插件的名稱,compile是指插件的goal。最終這條指令只是去執行maven-resources-plugin插件的compile目標,並不會拷貝資源文件.
一樣的,日常執行的mvn exec:java, 是指執行插件exec-maven-plugin的java目標,它並不會去編譯代碼html
###查看phase默認插件的execution的id 見maven pom進階教程 - 插件與繼承(plugin & inherite)java
###禁用默認插件的方法 方法1: 改掉默認插件配置的phase(官方文檔上並無寫這個方法)apache
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <id>default-jar</id> <!-- default-jar是maven默認打包jar的execution的id --> <phase>none</phase> <!-- 隨便寫,只要不存在就行 --> </execution> </executions> </plugin>
方法2: 設置skip爲true, 只有部分插件支持這個參數, 使用之種方法以前,最好先去查閱一下plugin的配置資料maven
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <id>default-resources</id><!-- process-resources階段的默認有execution的id --> <configuration> <skip>true</skip> <!--跳過本次任務--> </configuration> </execution> </executions> </plugin>
###修改默認插件的參數 與上一節相似,指明execution的id爲默認id 好比,將拷貝資源的操做更改到validate階段執行.net
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <id>default-resources</id><!-- process-resources階段的默認有execution的id --> <phase>validate</phase> </execution> </executions> </plugin>