Maven經常使用的幾個核心概念

在使用Maven的過程當中,常常會遇到幾個核心的概念,準確的理解這些概念將會有莫大的幫助。spring

1. POM(Project Object Model)項目對象模型maven

POM 與 Java 代碼實現瞭解耦,當須要升級版本時,只須要修改POM,而不須要更改Java代碼,而在POM穩定後,平常的Java代碼開發基本不涉及POM的修改。ide

 

2. 座標post

groupId , artifactId , version 三個元素是項目的座標,惟一的標識這個項目。測試

groupId 項目所在組,通常是組織或公司,artifactId 是當前項目在組中的惟一ID; version 表示版本,SNAPSHOT表示快照,表示此項目還在開發中,不穩定。spa

groupId 和實際項目不必定是一一對應的,maven 有模塊的概念,例如 spring-core, spring-context...;groupId 也不該該只對應公司或組織名,建議具體到項目名,由於公司或者組織下有多個項目,而artifactId只能表明模塊名。對象

 

3. 依賴blog

傳遞性依賴可能帶來一些問題,例如兩個依賴的版本不兼容,依賴SNAPSHOT可能會致使項目的不穩定問題,依賴的jar包因爲版權問題沒法使用等等問題,此時,就須要在dependency中用exclusion 排除依賴,而後引入合適的依賴,exclusion中只需提供groupId 和 artifactId 便可。繼承

Maven解決依賴衝突的兩個原則接口

1. 最短路徑(高優先級)

2. 最早聲明

幾個scope的有效範圍:

1. compile : 編譯,測試,運行都有效,默認的選擇

2. test : 測試有效,例如junit

3. provided : 編譯,測試有效,例如 servlet ,運行時容器會提供實現

4. runtime : 運行和測試有效,例如 jdbc,編譯時只需相應的接口,測試和運行時才須要具體的實現

5. system : 編譯,測試有效。使用此範圍的依賴必須經過systemPath元素顯式的指定依賴文件,於是

 此類依賴是不經過Maven倉庫解析的,通常適合於本機測試環境下,依賴本地起的服務

 6. import(2.0.9 以上):

4. 聚合與繼承

聚合:僅僅是爲了聚合其餘模塊,這樣就不用每一個模塊分別去執行MVN命令了,其自己並無實質性內容,注意其打包方式必須爲pom

<moduls>

  <modul> m1</modul>

  <modul> m2</modul>

  <modul> m3</modul>

</moduls>

繼承:

parent pom 用 <DependencyManagement> 聲明依賴以提升靈活性,其中聲明的依賴並不會實際引入實際的依賴,此時子pom繼承後的<dependency>就能夠只寫groupId 和 artifactId ,其餘細節 parent pom中已經聲明過了。

聚合是爲了快速的構建項目,而繼承是爲了不重複配置。但二者的打包方式都必須爲pom

 

5. 快照

A 和 B 合做開發,B 開發的模塊依賴A開發的模塊,A 發佈時version設爲快照,例如 2.1-SNAPSHOT,再發布過程當中,maven會自動給此版本打上時間戳,B 依賴於此快照版本,當B構建項目時,Maven會自動根據時間戳檢查最新版本,並更新。快照版本應該僅在組織內部的項目或者模塊間使用;正式發佈時,要記得改成正式版本

 

6. 生命週期

三套獨立的生命週期(clean, default, site),每一個週期都包含一些階段。

  clean的三個階段:
1.pre-clean:執行一些清理前須要完成的工做
2.clean 清理上一次構建生成的文件
3. post-clean 執行一些清理後須要完成的工做
  default的一些關鍵階段:
1. process-sources: 處理項目主資源文件,通常是將src/main/resources 目錄的內容進行變量替換等工做後,複製到項目輸出的主classpath目錄中。
2. compile 編譯項目的主源碼
3. process-test-sources: 處理項目測試資源文件
4. test-compile 編譯項目的測試代碼
5. test 進行測試
6. package 接受編譯好的代碼,打包成可發佈的格式,例如jar
7. install 將包安裝到Maven本地倉庫,供本地其餘Maven項目使用
8. deploy 將最終的包複製到遠程倉庫
  site 生命週期
1. pre-site 2. site 3. post-site 4.site-deploy

相對應得幾個經常使用命令 mvn clean; mvn test; mvn clean compile; mvn clean install

相關文章
相關標籤/搜索