maven生命週期理解

你能夠僅僅調用clean來清理工做目錄,僅僅調用site來生成站點。固然你也能夠直接運行 mvn clean install site 運行全部這三套生命週期。html

 

知道了每套生命週期的大概用途和相互關係之後,來逐個詳細看一下每套生命週期,Clean和Site相對比較簡單,先解釋一下。apache

 

每套生命週期都由一組階段(Phase)組成,咱們平時在命令行輸入的命令總會對應於一個特定的階段。好比,運行mvn clean ,這個的clean是Clean生命週期的一個階段。有點繞?要知道有Clean生命週期,也有clean階段。Clean生命週期一共包含了三個階段:服務器

  • pre-clean  執行一些須要在clean以前完成的工做
  • clean  移除全部上一次構建生成的文件
  • post-clean  執行一些須要在clean以後馬上完成的工做

mvn clean 中的clean就是上面的clean,在一個生命週期中,運行某個階段的時候,它以前的全部階段都會被運行,也就是說,mvn clean 等同於 mvn pre-clean clean ,若是咱們運行 mvn post-clean ,那麼 pre-clean,clean 都會被運行。這是Maven很重要的一個規則,能夠大大簡化命令行的輸入。app

 

下面看一下Site生命週期的各個階段:框架

  • pre-site     執行一些須要在生成站點文檔以前完成的工做
  • site    生成項目的站點文檔
  • post-site     執行一些須要在生成站點文檔以後完成的工做,而且爲部署作準備
  • site-deploy     將生成的站點文檔部署到特定的服務器上

這裏常常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這但是Maven至關強大的功能,Manager比較喜歡,文檔及統計數據自動生成,很好看。maven

 

最後,來看一下Maven的最重要的Default生命週期,絕大部分工做都發生在這個生命週期中,這裏,我只解釋一些比較重要和經常使用的階段:ide

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     複製並處理資源文件,至目標目錄,準備打包。
  • compile     編譯項目的源代碼。
  • process-classes
  • generate-test-sources 
  • process-test-sources 
  • generate-test-resources
  • process-test-resources     複製並處理資源文件,至目標測試目錄。
  • test-compile     編譯測試源代碼。
  • process-test-classes
  • test     使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。
  • prepare-package
  • package     接受編譯好的代碼,打包成可發佈的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     將包安裝至本地倉庫,以讓其它項目依賴。
  • deploy     將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享。

基本上,根據名稱咱們就能猜出每一個階段的用途post

 

記住,運行任何一個階段的時候,它前面的全部階段都會被運行,這也就是爲何咱們運行mvn install 的時候,代碼會被編譯,測試,打包。單元測試

記住,運行任何一個階段的時候,它前面的全部階段都會被運行,這也就是爲何咱們運行mvn install 的時候,代碼會被編譯,測試,打包。測試

記住,運行任何一個階段的時候,它前面的全部階段都會被運行,這也就是爲何咱們運行mvn install 的時候,代碼會被編譯,測試,打包。

記住,運行任何一個階段的時候,它前面的全部階段都會被運行,這也就是爲何咱們運行mvn install 的時候,代碼會被編譯,測試,打包。

 

此外,Maven的插件機制是徹底依賴Maven的生命週期的,所以理解生命週期相當重要,在以後的文章裏,我將會進一步解釋Maven的插件機制。

 

一個完整的項目構建過程一般包括清理、編譯、測試、打包、集成測試、驗證、部署等步驟,Maven從中抽取了一套完善的、易擴展的生命週期。Maven的生命週期是抽象的,其中的具體任務都交由插件來完成。Maven爲大多數構建任務編寫並綁定了默認的插件,如針對編譯的插件:maven-compiler-plugin。用戶也可自行配置或編寫插件。

1 . 三套生命週期

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

1 . 1 clean生命週期

  1. pre-clean    :執行清理前的工做;
  2. clean    :清理上一次構建生成的全部文件;
  3. post-clean    :執行清理後的工做

1 . 2 default生命週期

default生命週期是最核心的,它包含了構建項目時真正須要執行的全部步驟。

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources
  5. generate-resources
  6. process-resources    :複製和處理資源文件到target目錄,準備打包;
  7. compile    :編譯項目的源代碼;
  8. process-classes
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile    :編譯測試源代碼;
  14. process-test-classes
  15. test    :運行測試代碼;
  16. prepare-package
  17. package    :打包成jar或者war或者其餘格式的分發包;
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install    :將打好的包安裝到本地倉庫,供其餘項目使用;
  23. deploy    :將打好的包安裝到遠程倉庫,供其餘項目使用;

1 . 3 site生命週期

  1. pre-site
  2. site    :生成項目的站點文檔;
  3. post-site
  4. site-deploy    :發佈生成的站點文檔

2 . Maven的插件

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

Maven官網上有更詳細的官方插件列表:

2 . 1 插件的目標(Plugin Goals)

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

 

 

第二列中,冒號後面便是綁定的插件目標,冒號前面是插件的前綴(prefix),是配置和使用插件的一種簡化方式。Plugin Prefix

3 . 2 自定義綁定

  用戶能夠根據須要將任何插件目標綁定到任何生命週期的階段,如:將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>
複製代碼

4 . 配置插件

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>
複製代碼

也能夠對插件的各個目標進行更具體的配置。Configuring Plug-ins

5 . 插件倉庫

跟其餘構件同樣,插件也是根據座標存儲在Maven倉庫中。超級POM中Maven配置的默認插件遠程倉庫以下:

複製代碼
<pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
</pluginRepositories>
複製代碼

 

 本文部分轉自https://www.cnblogs.com/luotaoyeah/p/3819001.html 感謝做者

相關文章
相關標籤/搜索