Maven進階篇之Maven的生命週期和插件

一,Maven生命週期

1、Maven的生命週期

Maven的生命週期就是對全部的構建過程進行抽象和統一。包含了項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署和站點生成等幾乎全部的構建步驟。html

Maven的生命週期是抽象的,即生命週期不作任何實際的工做,實際任務由插件完成,相似於設計模式中的模板方法。apache

2、三套生命週期

 Maven定義了三套生命週期:clean、default、site,每一個生命週期都包含了一些階段(phase)。三套生命週期相互獨立,但各個生命週期中的phase倒是有順序的,且後面的phase依賴於前面的phase。執行某個phase時,其前面的phase會依順序執行,但不會觸發另外兩套生命週期中的任何phase。設計模式

  1. clean生命週期:清理項目,包含三個phase。
    1. pre-clean:執行清理前須要完成的工做
    2. clean:清理上一次構建生成的文件
    3. post-clean:執行清理後須要完成的工做
  2. default生命週期:構建項目,重要的phase以下
    1. validate:驗證工程是否正確,全部須要的資源是否可用
    2. compile:編譯項目的源代碼。
    3. test:使用合適的單元測試框架來測試已編譯的源代碼。這些測試不須要打包和佈署。
    4. Package:把已編譯的代碼打包成可發佈的格式,好比jar/war/pom。
    5. integration-test:若有須要,將包處理和發佈到一個可以進行集成測試的環境。
    6. verify:運行全部檢查,驗證包是否有效且達到質量標準.
    7. install:把包安裝到maven本地倉庫,能夠被其餘工程做爲依賴來使用。
    8. Deploy:在集成或者發佈環境下執行,將最終版本的包拷貝到遠程的repository,使得其餘的開發者或者工程能夠共享。
  3. site生命週期:創建和發佈項目站點,phase以下
    1. pre-site:生成項目站點以前須要完成的工做
    2. site:生成項目站點文檔
    3. post-site:生成項目站點以後須要完成的工做
    4. site-deploy:將項目站點發布到服務器

3、命令行和生命週期

    各個生命週期相互獨立,一個生命週期的階段先後依賴。服務器

一、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的插件

一,Maven插件介紹

1.經常使用的插件

maven的核心文件很小,主要的任務都是由插件來完成。定位到:%本地倉庫%\org\apache\maven\plugins,能夠看到一些下載好的插件


2  插件的目標(Plugin Goals)

 Maven的生命週期是抽象的,實際須要插件來完成任務,這一過程是經過將插件的目標(goal)綁定到生命週期的具體階段(phase)來完成的。如:將maven-compiler-plugin插件的compile目標綁定到default生命週期的compile階段,完成項目的源代碼編譯:

一個插件一般能夠完成多個任務,每個任務就叫作插件的一個目標。如執行mvn install命令時,調用的插件和執行的插件目標以下:

 

前面的即爲插件,後面的即爲插件的目標.每一個插件都有哪些個目標,官方文檔有更詳細的說明:Maven Plugins

3.自定義綁定

 用戶能夠根據須要將任何插件目標綁定到任何生命週期的階段,如:將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>
相關文章
相關標籤/搜索