Maven的生命週期就是對全部的構建過程進行抽象和統一。包含了項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署和站點生成等幾乎全部的構建步驟。html
Maven的生命週期是抽象的,即生命週期不作任何實際的工做,實際任務由插件完成,相似於設計模式中的模板方法。apache
Maven定義了三套生命週期:clean、default、site,每一個生命週期都包含了一些階段(phase)。三套生命週期相互獨立,但各個生命週期中的phase倒是有順序的,且後面的phase依賴於前面的phase。執行某個phase時,其前面的phase會依順序執行,但不會觸發另外兩套生命週期中的任何phase。設計模式
各個生命週期相互獨立,一個生命週期的階段先後依賴。服務器
一、mvn clean框架
調用clean生命週期的clean階段,實際執行pre-clean和clean階段maven
二、mvn testpost
調用default生命週期的test階段,實際執行test以及以前全部階段單元測試
三、mvn clean install測試
調用clean生命週期的clean階段和default的install階段,實際執行pre-clean和clean,install以及以前全部階段ui
maven的核心文件很小,主要的任務都是由插件來完成。定位到:%本地倉庫%\org\apache\maven\plugins,能夠看到一些下載好的插件
Maven的生命週期是抽象的,實際須要插件來完成任務,這一過程是經過將插件的目標(goal)綁定到生命週期的具體階段(phase)來完成的。如:將maven-compiler-plugin插件的compile目標綁定到default生命週期的compile階段,完成項目的源代碼編譯:
一個插件一般能夠完成多個任務,每個任務就叫作插件的一個目標。如執行mvn install命令時,調用的插件和執行的插件目標以下:
前面的即爲插件,後面的即爲插件的目標.每一個插件都有哪些個目標,官方文檔有更詳細的說明:Maven Plugins
用戶能夠根據須要將任何插件目標綁定到任何生命週期的階段,如:將maven-source-plugin的jar-no-fork目標綁定到default生命週期的package階段,這樣,之後在執行mvn package命令打包項目時,在package階段以後會執行源代碼打包,生成如:ehcache-core-2.5.0-sources.jar形式的源碼包
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <id>attach-source</id> <phase>package</phase><!-- 要綁定到的生命週期的階段 --> <goals> <goal>jar-no-fork</goal><!-- 要綁定的插件的目標 --> </goals> </execution> </executions> </plugin> </plugins> …… </build>
同時也能夠修改默認綁定的插件參數.如:在上圖執行mvn install命令時 maven-surefire-plugin:2.7.2:test
插件就對咱們編寫的單元測試進行測試,爲了跳過單元測試,可修改該插件的參數跳過單元測試.
<build> <plugins> <!--打包時跳過單元測試--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests><!--true 跳過單元測試--> </configuration> </plugin> ... </plugins>
Maven插件高度易擴展,能夠方便的進行自定義配置。如:配置maven-compiler-plugin插件編譯源代碼的JDK版本爲1.7:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin>