前言

當我們在開發項目時,有時需要用到外部依賴組件,例如當我們需要 Json 序列化的時候需要用到 FastJson 組件,我們可以通過下載對應 jar 包加載到項目中。但當一個大的項目同時需要依賴各種各樣的外部服務,就存在著配置繁瑣、依賴沖突等問題,因此可以通過 maven 來完成對應的依賴管理功能。

一、Settings 配置

settings.xml 用來配置 maven 項目中的各種參數文件,包括本地倉庫、遠程倉庫、私服、認證等信息。

1.1 配置概述

1.1.1 全局 settings、用戶 setting、pom 的區別

  • 全局 settings.xml 是 maven 的全局配置文件,一般位於 ${maven.home}/conf/settings.xml,即 maven 文件夾下的 conf 中。
  • 用戶 setting 是 maven 的用戶配置文件,一般位於 ${user.home}/.m2/settings.xml,即每位用戶都有一份配置文件。
  • pom.xml 文件是項目配置文件,一般位於項目根目錄下或子目錄下。

配置優先級從高到低:pom.xml > 本地 settings > 全局 settings

如果這些文件同時存在,在應用配置時,會合並它們的內容,如果有重復的配置,優先級高的配置會覆蓋優先級低的。

1.1.2 倉庫【重要】

如前言所述,我們依賴的外部服務是需要有地方進行存儲的,而存儲的地方就稱之為倉庫。其中倉庫又分為本地倉庫、中央倉庫、鏡像倉庫、私服。

其對應關系為:

(1)本地倉庫

當項目在本地編譯或運行時,直接加載本地的依賴服務無疑是最快的。默認情況下,不管在 Window 還是 Linux 下,每個用戶在自己用戶目錄下都有一個路徑名為.m2/repository/ 的倉庫目錄。

而原始的本地倉庫是為空的,因此 maven 需要知道一個網絡上的倉庫,在本地倉庫不存在時前往下載網絡上的倉庫,也就是遠程倉庫。

(2)中央倉庫

當 maven 未配置時,會默認請求 maven 的中央倉庫,中央倉庫包含瞭這個世界上絕大多數流行的開源 java 構件,以及源碼、作者信息、SCM, 信息、許可證信息等,每個月這裡都會接受全世界 java 程序員大概 1 億次的訪問,它對全世界 java 開發者的貢獻由此可見一斑。

但是由於最常見的例如網絡原因等,國外的中央倉庫使用起來並不順利,因此就有瞭下載地址為國內的中央倉庫,也就是鏡像倉庫。

(3)鏡像倉庫

總結來說,鏡像倉庫就是將國外的中心倉庫復制一份到國內,這樣一來下載速度以及訪問速度都將很快。

(4)私服

一般來說中央倉庫或者鏡像倉庫都能滿足我們的需求,但是當我們在公司內合作開發代碼時,可能因為系統保密性原因,有一些其他同事開發的外部依賴隻希望能夠被本公司的人使用,而如果上傳到鏡像倉庫則保密性就不復存在瞭。因此私服最主要的功能時存儲一些公司內部不希望被公開的依賴服務。

1.2 settings 配置詳解

settings.xml 配置瞭本地全局 maven 的相關配置。

以下是一份 seetings.xml 的文件配置頂級元素。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>
<interactiveMode>
<usePluginRegistry>
<offline>
<pluginGroups>
<servers>
<mirrors>
<proxies>
<profiles>
<activeProfiles>
</settings>