弄懂maven倉庫 & 倉庫優(yōu)先級 & settings & pom配置關系及差異
repository 倉庫
本地倉庫
本機一般 .m2
本地倉庫地址可以在 settings.xml 里邊指定
遠程倉庫
比如公司私有倉庫
pom 可以通過配置多個 repository 來,如果好多項目共用的話,可以在 settings 文件配置 profile,這樣新項目就不需要重復配置 repository 了
中央倉庫
maven 必須至少知道一個遠程倉庫,中央倉庫就是默認的倉庫,不需要顯示配置在maven 的 super pom 中配置的
兜底用的,找不到的 jar 會找它
如果中央倉庫慢可以用 mirrors 來替換它,它的 id 是 central,在 mirrorOf 標簽中配置它的標簽就是替換了
倉庫在哪里配置
可以在 settings 或者?pom.xml 中配置
可以嵌入到 profile 中,也可以單獨通過 repository 配置然后 profile 通過 id 引用
誰用倉庫
profile (構建) 標簽會指定倉庫
下載 jar 會有一個默認的搜索順序,見 repo 優(yōu)先級
server 和 repository如何關聯(lián)
通過 distributionManagement 標簽根據 id 關聯(lián)起來
依賴倉庫的配置方式
中央倉庫,這是默認的倉庫
鏡像倉庫,通過 sttings.xml 中的 settings.mirrors.mirror 配置
全局profile倉庫,通過 settings.xml 中的 settings.repositories.repository 配置
項目倉庫,通過 pom.xml 中的 project.repositories.repository 配置
項目profile倉庫,通過 pom.xml 中的 project.profiles.profile.repositories.repository 配置
本地倉庫
依賴優(yōu)先級關系由近(本地倉庫)及遠(中央倉庫)
強烈注意: 你的 maven 的環(huán)境變量會覆蓋一切. 當你發(fā)現(xiàn)你修改 settings 不生效的時候,檢查下你的 maven home 配置
repo 優(yōu)先級
本地倉庫jar>global settings active profile> user settings active profile>pom profile>pom repo>user mirror>global mirrorpom中的repo配置高于user/global settings中的mirroruser/global settings中的activa profile高于pom中的repoglobal settgings中的active profile高于user settings中的active profileuser settings active profile高于mirror(checked)但是settings定位不同,它傾向于提供一些公共的附屬信息,而不是個性化的構建信息.它會
盡量融合到你的pom中。
mirror鏡像又是個什么東西
就是一個備份或冗余.并且你有的我也有并且我比你快
用鏡像倉庫替代默認的遠程倉庫
用來替代在 pom 中 repository 定義的倉庫(miorrorOf 標簽通過唯一的倉庫 id)
maven 的中央倉庫 id 是 central(在 super pom 中配置)
注意:當遠程倉庫被鏡像匹配到的,則在獲取 jar 包將從鏡像倉庫獲取,而不是我們配置的 repository 倉庫, repository 將失去作用
如果你不是以上兩個目的就不用配置鏡像了
mirror優(yōu)先級
見 repo 優(yōu)先級
pom 不支持配置
profile是個什么東西
定義構建程序的資源和配置,如:????-?遠程倉庫列表- 構建時本地路徑及遠程路徑- 唯一標志- 自動觸發(fā)邏輯- 擴展屬性列表- 插件倉庫列表
profile通過什么配置
通過profiles/profile標簽配置profile在哪里配置以及有什么區(qū)別
在settings和pom都可以配置但是settings只能提供給pom: repository,plugin repository,以及free-form properties供pom使用可以理解為setting的profile是對pom中的profile信息的補充以達到build的目的
profile 相關標簽說明
activation
自動觸發(fā)/激活 profile 的條件邏輯
不是激活profile的唯一方式,還可以通過命令行-P yourWantedtoActiveProfile,anotherProfiletoActive
可以配置自動激活條件特別多,具體參考文檔
mvn help:active-profilesproperties
對profile的擴展,配置一些屬性值${x}
注:如果該profile被激活,則可以在pom.xml中使用${user.install}。
profile 中 Repositories
遠程倉庫列表,它是 maven 用來填充構建系統(tǒng)本地倉庫所使用的一組遠程倉庫。
遠程倉庫唯一標志/名稱
release/snapshots 配置
遠程倉庫 url
pluginRepositories
maven插件的倉庫
activeProfiles
手動激活profiles的列表,配置的是在pom中配置的profile的id
按照profile被應用的順序定義activeProfile
不管在哪里配置的profile都記得要激活
pom 激活方式
<activation><activeByDefault>trueactiveByDefault>activation>
settings 激活方式
profile_user_settings
與 pom 中 profile 的區(qū)別與聯(lián)系
settings.xml 中的 profile 元素是 pom.xml 中 profile 元素的裁剪版本
它包含了 id、activation、repositories、pluginRepositories 和 properties 元素。
這里的 profile 元素只包含這五個子元素是因為這只關心構建系統(tǒng)這個整體
如果一個 settings.xml 中的 profile 被激活,它的值會覆蓋任何其它定義在 pom.xml 中帶有相同 id 的 profile。
settings 的 profile 一般是個 pom 的 profile 提供補充信息, 一般是公共的,適合所有項目的
settings 文件是個什么東西
從 settings.xml 的文件名就可以看出,它是用來設置 maven 參數(shù)的配置文件。并且,
settings.xml 是 maven 的全局配置文件。而 pom.xml 文件是所在項目的局部配置。
Settings.xml 中包含類似本地倉儲位置、修改遠程倉儲服務器、認證信息等配置。
settings.xml 文件位置
settings.xml 文件一般存在于兩個位置:
全局配置: ${M2_HOME}/conf/settings.xml
用戶配置: ????????.???????/.??2/????????????????.??????????????:
settings和pom之間的關系
settings 偏向于全局配置
一般 pom 的優(yōu)先高于settings,但是他們之間的信息是相互引用的
Servers是個什么東西
如果需要用戶名和密碼就需要配置下 server,不適合放在 pom 中,一般定義在 settings 中,由 pom 去引用
倉庫的下載和部署是在 pom.xml 文件中的 repositories 和 distributionManagement 元素中定義的。
server 如何跟 repository 關聯(lián)
該 id 與 distributionManagement 中 repository 元素的 id 相匹配
repository/profile 標簽
profile 可以再 settings 和 pom 中配置
repository 無法單獨在 settings中 配置,不報錯不生效,但是可以配置到 profile 中
repository 和 profile 的關系
profile 會用到 repository
repository 也可以單獨配置
settings 和 pom優(yōu)先級
要看具體標簽來定
profile 是 settings 的優(yōu)先級最高
見 repo 優(yōu)先級
settings 和 pom 之間的關聯(lián)
一般是 pom 會取用 setttings 中的配置
settings 一般全局和公共的配置
Mirrors
用來替代某個倉庫的,一般替代中央倉庫,但是不局限于替代它。可以替代一切倉庫
mirrorOf 來指定倉庫 id,這個 id 是 pom 文件中 repository 的 id
mirrofOf 標簽
mirrofOf 在哪配置
mirrorOf 配置內容含義是什么
mirrorOf 標簽里面放置的是 repository 配置的 id,為了滿足一些復雜的需求,Maven還支持更高級的鏡像配置
mirrorOf 配置規(guī)則
external:* = 不在本地倉庫的文件才從該鏡像獲取repo,repo1 = 遠程倉庫 repo 和 repo1 從該鏡像獲取*,!repo1 = 所有遠程倉庫都從該鏡像獲取,除 repo1 遠程倉庫以外* = 所用遠程倉庫都從該鏡像獲取maven的中央倉庫id是central, 所以mirrorOf配置為central就達到了替換maven倉庫的目的
repostitory mirror profile關系
repository 就是 jar 包的庫
mirror 可以替換某個 repository
profile 里面需要包含某個 repository
配置鏡像倉庫
在 settings.xml 全局配置
<mirrors> <mirror><id>aliyunid><name>aliyunname><mirrorOf>centralmirrorOf><url>https://maven.aliyun.com/repository/centralurl>mirror>mirrors>
倉庫優(yōu)先級(訪問不通或者 jar 不存在自動切換)
見 repo 優(yōu)先級
source: //www.jianshu.com/p/4ac4155b7cc3記得點「贊」和「在看」↓
愛你們
