1. 程式人生 > >對maven的深入理解《二》

對maven的深入理解《二》

1.maven與ant與make的基本區別:

  1. 最早出現的是make的makeFile,但是強依賴與編寫的作業系統,不是跨平臺,於是ant出現,因為ant用java寫的,所以ant跨平臺了,但是ant和make一樣都是過程式開發,在不同的工程中重複性勞動多,於是maven出現,因為maven是宣告式開發,有外掛,不需要做那麼多的複製貼上
  2. Maven還有很多Ant沒有的高階特性,例如依賴管理等,這一切使得Maven不僅是構建工具,更是專案管理工具,並越發流行起來。

2.Maven擁有三套相互獨立的生命週期,它們分別為clean,default和site:

  1. Clean Lifecycle在進行真正的構建之前進行一些清理工作。
  2. Default Lifecycle構建的核心部分,編譯,測試,打包,部署等等。
  3. Site Lifecycle生成專案報告,站點,釋出站點。

3.各個生命週期的關係:
maven各個生命週期相互獨立,但是對應的生命週期的各個階段是相互依賴的。比如:clean和default之間是獨立的,但是clean的各個階段是相互依賴,並依次執行的。

  1. clean生命週期

    clean生命週期的目的是清理專案,它包含三個階段:

    1)pre-clean 執行一些清理前需要完成的工作。

    2)clean 清理上一次構建生成的檔案。

    3)post-clean 執行一些清理後需要完成的工作。

  2. default生命週期

    default生命週期定義了真正構件時所需要執行的所有步驟,它是生命週期中最核心的部分,它包含的階段如下:

    1) validate 驗證專案是否正確和所有需要的相關資源是否可用

    2) initialize 初始化構建

    3) generate-sources

    4)process-sources 處理原始碼

    5) generate-resources

    6)process-resources 處理專案主資原始檔。對src/main/resources目錄的內容進行變數替換等工作後,複製到專案輸出的主classpath目錄中。

    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 接受編譯好的程式碼,打包成可釋出的格式

    18)pre-integration-test

    19)integration-test

    20)postintegration-test

    21)verify

    22)install 將包安裝到Maven本地倉庫,供本地其他Maven專案使用

    23)deploy 將最終的包複製到遠端倉庫,供其他開發人員和Maven專案使用

  3. site生命週期

    site生命週期的目的是建立和釋出專案站點,Maven能夠基於POM所包含的資訊,自動生成一個友好的站點,方便團隊交流和釋出專案資訊。該生命週期包含如下階段:

    1)pre-site 執行一些在生成專案站點之前需要完成的工作

    2)site 生成專案站點文件

    3)post-site 執行一些在生成專案站點之後需要完成的工作

    4)site-deploy 將生成的專案站點發布到伺服器上

4.Artifact & Repositories:
1).Artifact:一個專案將要產生的檔案,可以是jar檔案,原始檔,二進位制檔案,war檔案,甚至是pom
2).Repositories是用來儲存Artifact的

5.repositories和pluginRepositories和distributionManagement的異同

  1. 構件可以分為兩類
    一類是被其他構件依賴的構件(dependencies),這也是Maven庫中主要的構件。另一類是外掛(plugins),這是一種特殊的構件.
    Repositories:專門用於構件在遠端庫的儲存
    pluginRepositories:由於外掛的特殊性,所以外掛會和構件分開儲存
    distributionManagement:包含和,
    前者:部署後釋出的庫
    後者:更側重於開發過程中釋出的庫(快照版)
    注:Repositories和pluginRepositories可設定在profile中,也可設定在profile外,project內:區別:前者:更側重於工程中某個環境的庫,後者:是適用於整個工程的庫
  2. 在pom.xml或settings.xml中設定,往往需要提供一個的如下資訊:
    id,庫的ID
    name,庫的名稱
    url,庫的URL
    releases,庫中版本為releases的構件
    snapshots,庫中版本為snapshots的構件

根據構件的版本,可以將構件分為releases型別的構件和snapshots型別的構件。

對於一個構件,其版本的變化是否會引起庫中更新該構件呢?則需要根據庫的或設定。和的設定可以引數一致

enabled,是否支援更新
updatePolicy,構件4種更新的策略,可選值有daily, always, never, interval:X(其中的X是一個數字,表示間隔的時間,單位min),預設為daily
checksumPolicy,校驗碼異常的策略,可選值有ignore, fail, warn

6.mvn install 和mvn clean和mvn package和mvn deploy的區別

Mvn package:會將工程打成jar包(看pom),並放在target目錄下
mvn install:會將工程打成jar包(看pom怎麼配),並放於m2的目錄下以及target目錄下
Mvn deploy:會將工程打成jar包(看pom),並放於m2和target中,且部署到遠端伺服器
Mvn clean:會刪除target目錄