1. 程式人生 > >Maven 的一些概念和參考

Maven 的一些概念和參考

Maven 翻譯為"專家"、“內行”,是 Apache 下的一個純 Java 開發的開源專案。基於專案物件模型(縮寫:POM)概念,Maven利用一箇中央資訊片斷能管理一個專案的構建、報告和文件等步驟。

Maven 是一個專案管理工具,可以對 Java 專案進行構建、依賴管理。

Maven 也可被用於構建和管理各種專案,例如 C#,Ruby,Scala 和其他語言編寫的專案。Maven 曾是 Jakarta 專案的子專案,現為由 Apache 軟體基金會主持的獨立 Apache 專案。

Maven 功能

Maven 能夠幫助開發者完成以下工作:

  • 構建
  • 文件生成
  • 報告
  • 依賴
  • SCMs
  • 釋出
  • 分發
  • 郵件列表

POM

POM( Project Object Model,專案物件模型 ) 是 Maven 工程的基本工作單元,是一個XML檔案,包含了專案的基本資訊,用於描述專案如何構建,宣告專案依賴,等等。

執行任務或目標時,Maven 會在當前目錄中查詢 POM。它讀取 POM,獲取所需的配置資訊,然後執行目標。

POM 中可以指定以下配置:

  • 專案依賴
  • 外掛
  • 執行目標
  • 專案構建 profile
  • 專案版本
  • 專案開發者列表
  • 相關郵件列表資訊

Maven 依賴搜尋順序

當我們執行 Maven 構建命令時,Maven 開始按照以下順序查詢依賴的庫:

  1. 步驟 1 - 在本地倉庫中搜索,如果找不到,執行步驟 2,如果找到了則執行其他操作。
  2. 步驟 2 - 在中央倉庫中搜索,如果找不到,並且有一個或多個遠端倉庫已經設定,則執行步驟 4,如果找到了則下載到本地倉庫中已被將來引用。
  3. 步驟 3 - 如果遠端倉庫沒有被設定,Maven 將簡單的停滯處理並丟擲錯誤(無法找到依賴的檔案)。
  4. 步驟 4 - 在一個或多個遠端倉庫中搜索依賴的檔案,如果找到則下載到本地倉庫已被將來引用,否則 Maven 將停止處理並丟擲錯誤(無法找到依賴的檔案)。

Maven 阿里雲(Aliyun)倉庫

Maven 倉庫預設在國外, 國內使用難免很慢,我們可以更換為阿里雲的倉庫。

修改 maven 根目錄下的 conf 資料夾中的 setting.xml 檔案,在 mirrors 節點上,新增內容如下:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/public</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

為什麼我看到有些專案的 Maven 地址是 http://maven.aliyun.com/nexus/content/groups/public/

http://maven.aliyun.com/ 首頁上顯示的倉庫地址為推薦使用的倉庫地址。為了保證相容性也也支援以前的倉庫地址,使用者仍然可以通過 http://maven.aliyun.com/nexus/content/groups/public 來使用服務。

注:Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus就可以滿足這樣的需要。

Maven 的 Snapshot 版本與 Release 版本

1、Snapshot 版本代表不穩定、尚處於開發中的版本。

2、Release 版本則代表穩定的版本。

3、什麼情況下該用 SNAPSHOT?

協同開發時,如果 A 依賴構件 B,由於 B 會更新,B 應該使用 SNAPSHOT 來標識自己。這種做法的必要性可以反證如下:

  • a. 如果 B 不用 SNAPSHOT,而是每次更新後都使用一個穩定的版本,那版本號就會升得太快,每天一升甚至每個小時一升,這就是對版本號的濫用。
  • b.如果 B 不用 SNAPSHOT, 但一直使用一個單一的 Release 版本號,那當 B 更新後,A 可能並不會接受到更新。因為 A 所使用的 repository 一般不會頻繁更新 release 版本的快取(即本地 repository),所以B以不換版本號的方式更新後,A在拿B時發現本地已有這個版本,就不會去遠端Repository下載最新的 B

4、 不用 Release 版本,在所有地方都用 SNAPSHOT 版本行不行?

不行。正式環境中不得使用 snapshot 版本的庫。 比如說,今天你依賴某個 snapshot 版本的第三方庫成功構建了自己的應用,明天再構建時可能就會失敗,因為今晚第三方可能已經更新了它的 snapshot 庫。你再次構建時,Maven 會去遠端 repository 下載 snapshot 的最新版本,你構建時用的庫就是新的 jar 檔案了,這時正確性就很難保證了。

參考文章

原文連結

https://notes.0xl2oot.cn/maven/2018/10/30/maven.html