Maven3生命週期和插件

生命週期

   Maven的生命週期是經過大量的項目和工具的學習和反思,而後總結出來的一套完善和易擴展的流程,包含了項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署和發佈站點等幾乎全部的構建步驟;同時,Maven的生命週期是抽象的,它只是定義了一系列的生命週期以及生命週期的執行順序,而具體每一個生命週期的處理邏輯由Maven插件提供。html

Maven共有三套生命週期:java

  • clean週期:主要是用來清理項目apache

  • default週期:主要是用來構建項目服務器

  • site週期:主要是用來發布項目站點maven

每一個週期中都包含一些有順序的階段(phase)。ide

clean週期包含了如下的階段:工具

  • pre-clean 執行一些清理前須要完成的工做post

  • clean 清理上一次構建生成的文件;    默認綁定maven-clean-plugin:clean學習

  • post-clean 執行一些清理完成後須要完成的操做測試

default週期包含如下的階段:

  • validate

  • initialize

  • generate-sources

  • process-sources 處理項目主資源文件,通常來講,是對src/main/resources目錄內容進行變量的替換等工做後,複製到項目輸出的主classpath目錄中;  默認綁定maven-resources-plugin:resources

  • generate-resources

  • process-resources

  • compile 編譯項目的源代碼。通常來講,是編譯src/main/java目錄下的Java文件至項目輸出的主classpath目錄中;  默認綁定maven-compler-plugin:compile

  • process-classes

  • generate-test-sources  

  • process-test-resources  默認綁定maven-resources-plugin:testResources

  • test-compile  默認綁定maven-compler-plugin:testCompile

  • process-test-classes

  • test  默認綁定maven-surefire-plugin:test

  • prepare-package  

  • package  默認綁定maven-jar-plugin:jar(當項目package爲jar或不填時)

  • pre-integration-test

  • intgration-test

  • post-integration-test

  • verify

  • install 將包安裝到本地Maven倉庫,供本地其餘Maven項目使用  默認綁定maven-install-plugin:install

  • deploy 將包部署到遠程Maven倉庫中  默認綁定maven-deploy-plugin:deploy

site週期包含如下階段:

  • pre-site 執行一些在生成項目站點以前須要完成的工做

  • site 生成項目站點的文檔;  默認綁定maven-site-plugin:site

  • post-site 執行一些在生成項目站點以後須要完成的工做

  • site-deploy 將生成的項目站點發布到服務器上;  默認綁定maven-site-plugin:deploy

以上生命週期詳細可參考官方文檔 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

在命令行中輸入 mvn -h(help) 能夠查看maven命令的格式,能夠看到maven命令的格式以下:

mvn [options] [<goal(s)>] [<phase(s)>]

  • options 指命令的選項,像剛剛使用的-h,mvn -h會列出詳細的選項介紹,-s 能夠指定使用的settings.xml文件的地址

  • goals 指插件的目標,通常爲  插件前綴:goal 或 groupId:artifactId[:version]:goal

  • phases 指階段名,對應上面的階段,能夠最多使用三個階段,每一個週期指定一個階段,三個週期的階段相互獨立,當指定一個階段後maven會從指定階段的週期的第一個階段綁定的插件目標開始執行一直到指定的階段,如mvn test會執行default週期從validate一直到test階段的綁定插件,mvn clean package會執行clean週期的pre-clean和clean階段以及default週期的validate到package階段

Maven插件

     Maven的生命週期行爲都是由插件實現,Maven官方提供許多官方的插件,好比全部的默認綁定插件,全部的官方插件groupId都是org.apache.maven.plugins,同時還要許多優秀的第三方插件,而且用戶能夠本身編寫插件來完成特殊的需求。

插件目標

     每一個插件都有一個或者多個目標(goal),每一個目標具體提供了某項功能,有些目標須要與Maven生命週期相綁定,有些能夠直接使用,好比:

     mvn help:describe -Dplugins=dependency [-Ddetail] 用來打印出指定插件的目標以及功能,加上-Ddetail能夠查看詳細信息

     mvn dependency:list 列出全部已解析的依賴
     mvn dependency:tree 列出已解析的依賴樹
     mvn dependency:analyze 檢查依賴,會警告直接import使用但沒有直接依賴的包,以及直接依賴卻沒有import使用的包


插件綁定

    Maven生命週期的重要階段都有默認插件目標綁定,具體可看上文,同時也能夠自定義綁定的插件目標,如當咱們但願在集成測試經過後同時生成項目的源代碼包,可使用maven-source-plugin:jar-no-fork目標,綁定到verify階段,配置以下:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

插件參數

    在使用插件時能夠配置一些插件的茶樹便於使用。

  • 當在命令行使用插件時,可使用-D參數名=值 設置參數值,如 mvn install -Dmaven.test.skip=true 能夠跳過測試階段

  • 當在pom中使用插件時,能夠在<configuration></configuration>中設置參數值

插件配置中的默認信息

    在pom文件中配置插件時,有許多的信息能夠省略,而使用默認信息來簡化配置:

  1. 當插件時Maven官方插件時(即groupId爲org.apache.maven.plugins)能夠省略groupId

  2. 全部的默認綁定插件都定義在Maven的超級pom文件中,全部的pom文件都繼承至它,因此默認綁定插件不用聲明

  3. 一些插件的目標會設置默認綁定階段,這時在pom中配置時能夠省略phase,插件目標的默認綁定階段可使用mvn help:describe -Dplugins=[前綴或座標] -Dgoal=目標 -Ddetail查看

  4. 全部插件均可以省略版本(version),默認綁定插件版本被省略時會使用超級pom定義的版本,其餘插件會到對應的插件文件夾下檢查maven-metadata.xml文件,並將這個文件與遠程倉庫中對應位置的相同文件歸併成一個maven-metadata.xml文件,大體以下結構:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.10</version>
  <versioning>
    <latest>2.10</latest>
    <release>2.10</release>
    <versions>
      <version>2.0-alpha-1</version>
      <version>2.0-alpha-2</version>
      <version>2.0-alpha-3</version>
      <version>2.0-alpha-4</version>
      <version>2.0</version>
      <version>2.1</version>
      <version>2.1-atlassian-2</version>
      <version>2.1-SONATYPE-709464</version>
      <version>2.2</version>
      <version>2.2-SONATYPE-810529</version>
      <version>2.3</version>
      <version>2.4</version>
      <version>2.5</version>
      <version>2.5.1</version>
      <version>2.6</version>
      <version>2.7</version>
      <version>2.8</version>
      <version>2.9</version>
      <version>2.10</version>
    </versions>
    <lastUpdated>20151008094254</lastUpdated>
  </versioning>
</metadata>

將會更具版本計算出最新版本(latest,多是快照版本),和最新發布版本(release),默認使用最新發布版本,但這樣省略版本可能會形成沒法預料的錯誤,因此最好仍是要顯示的聲明插件版本。

相關文章
相關標籤/搜索