關(guān)于Maven混合配置私有倉(cāng)庫(kù)和公共倉(cāng)庫(kù)的問(wèn)題
背景
近期在調(diào)研一個(gè)開(kāi)源倉(cāng)庫(kù),于是將 代碼 從github下載后,當(dāng)IDEA sync依賴時(shí)出現(xiàn)Cannot resolve org.fourthline.cling:cling-support:2.1.1
的問(wèn)題,詳情如下:
Cannot resolve org.fourthline.cling:cling-support:2.1.1 Clean up the broken artifacts data (.lastUpdated files) and reload the project. Cannot resolve org.fourthline.cling:cling-core:2.1.1 Clean up the broken artifacts data (.lastUpdated files) and reload the project.
很明顯這個(gè)問(wèn)題是Maven倉(cāng)庫(kù)找不到需要的jar包。那么如何解決這個(gè)問(wèn)題呢?
私有和公共倉(cāng)庫(kù)混合配置
Maven倉(cāng)庫(kù)
首先,需要知道Maven倉(cāng)庫(kù)分為私有倉(cāng)庫(kù)、公有倉(cāng)庫(kù)、第三方倉(cāng)庫(kù)。其中:
- 私有倉(cāng)庫(kù):一般是公司或個(gè)人自己搭建的倉(cāng)庫(kù)。
- 公共倉(cāng)庫(kù)
首選是Maven官方的倉(cāng)庫(kù),地址:repo1.maven.org/maven2/
官方倉(cāng)庫(kù)在國(guó)內(nèi)訪問(wèn)極慢,因此國(guó)內(nèi)一般會(huì)使用阿里云倉(cāng)庫(kù)替代,地址:maven.aliyun.com/nexus/conte…
- 第三方倉(cāng)庫(kù):一些個(gè)人、團(tuán)體、公司開(kāi)放的倉(cāng)庫(kù),倉(cāng)庫(kù)中的jar包并沒(méi)有發(fā)布到公共倉(cāng)庫(kù)中。
熟悉倉(cāng)庫(kù)的分類(lèi)對(duì)于解決上文中遇到的問(wèn)題有這個(gè)重要的作用。
解決步驟
一、驗(yàn)證私有倉(cāng)庫(kù)
遇到依賴缺失的問(wèn)題后,首先需要確認(rèn)私有倉(cāng)庫(kù)
是否存在依賴,查看nexus
發(fā)現(xiàn)并沒(méi)有需要的依賴,可以斷定私有倉(cāng)庫(kù)
沒(méi)有此依賴。
二、搜索共有倉(cāng)庫(kù)
Maven官方的倉(cāng)庫(kù)提供了Web搜索頁(yè)面,地址:repo1.maven.org/maven2/,嘗試搜索后發(fā)現(xiàn)也沒(méi)有需要的依賴。如下:
三、搜索第三方倉(cāng)庫(kù)
經(jīng)過(guò)以上搜索后,可以斷定 代碼 需要的依賴,一定是由第三方倉(cāng)庫(kù)提供的。如何找到是在哪個(gè)第三方倉(cāng)庫(kù)呢?
此時(shí),就需要mvnrepository
來(lái)提供幫助了,地址: mvnrepository.com/ 。mvnrepository
提供了公共倉(cāng)庫(kù)和第三方倉(cāng)庫(kù)中jar包的索引、查詢、下載等實(shí)用功能。
我們嘗試搜索需要的依賴, mvnrepository.com/artifact/or…,結(jié)果如下圖:
可以看到在mvnrepository
中找到了需要的依賴。那么問(wèn)題來(lái),如何知道第三方倉(cāng)庫(kù)的地址呢?可以詳細(xì)看上圖中箭頭指向的區(qū)域,這里展示了第三方倉(cāng)庫(kù)的maven url。
在實(shí)踐中,完全可以跳過(guò)搜索
公共倉(cāng)庫(kù)
,因?yàn)?code>mvnrepository已經(jīng)包含了公共倉(cāng)庫(kù)
的依賴。
四、maven配置
maven倉(cāng)庫(kù)的配置是在setting.xml
配置的。如果要混合配置私有倉(cāng)庫(kù)和公共倉(cāng)庫(kù),需要在setting.xml
增加新的mirror
和profile
,并激活新的activeProfile
。
mirror
setting.xml
有mirrors
節(jié)點(diǎn),是用來(lái)配置鏡像URL的。mirrors
可以配置多個(gè)mirror
,每個(gè)mirror
有id
,name
,url
,mirrorOf
屬性,詳細(xì)解釋如下:
- id是唯一標(biāo)識(shí)一個(gè)mirror
- name貌似沒(méi)多大用,相當(dāng)于描述
- url是官方的庫(kù)地址
- mirrorOf代表了一個(gè)鏡像的替代位置,其中,
- *: 匹配所有,所有內(nèi)容都從鏡像拉??;
- external:*: 除了本地緩存的所有從鏡像倉(cāng)庫(kù)拉?。?/li>
- repo,repo1: repo或者repo1,這里的repo指的倉(cāng)庫(kù)ID;
- *,!repo1: 除了repo1的所有倉(cāng)庫(kù);
我們這次需要添加的mirror
如下:
<mirror> <id>nexus-4thline</id> <mirrorOf>4thline</mirrorOf> <name>4thline nexus</name> <url>http://4thline.org/m2/</url> </mirror>
這里又產(chǎn)生了一個(gè)問(wèn)題,配置了多個(gè)mirror
,Maven如何排序?答案是,Maven并不是按照setting.xml
中配置的順序執(zhí)行,而是根據(jù)字母排序來(lái)指定第一個(gè),然后會(huì)遍歷所有的倉(cāng)庫(kù),直至找到需要的依賴。
profile
作用:根據(jù)環(huán)境參數(shù)來(lái)調(diào)整構(gòu)建配置的列表,settings.xml
中的profile
元素是pom.xml
中profile
元素的裁剪版本。
id
:profile的唯一標(biāo)識(shí)activation
:自動(dòng)觸發(fā)profile的條件邏輯repositories
:遠(yuǎn)程倉(cāng)庫(kù)列表pluginRepositories
:插件倉(cāng)庫(kù)列表properties
:擴(kuò)展屬性列表
這里的profile元素只包含這五個(gè)子元素是因?yàn)檫@里只關(guān)心構(gòu)建系統(tǒng)這個(gè)整體(這正是settings.xml文件的角色定位),而非單獨(dú)的項(xiàng)目對(duì)象模型設(shè)置。如果一個(gè)settings.xml
中的profile
被激活,它的值會(huì)覆蓋任何其它定義在pom.xml
中帶有相同id的profile
。
我們這次需要添加的profile
如下:
<profile> <id>4thline</id> <repositories> <repository> <id>4thline</id> <url>http://4thline.org/m2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile>
activeProfile
作用:手動(dòng)激活profiles的列表,按照profile
被應(yīng)用的順序定義activeProfile
。
該元素包含了一組
activeProfile
元素,每個(gè)activeProfile
都含有一個(gè)profile id。任何在activeProfile
中定義的profile id,不論環(huán)境設(shè)置如何,其對(duì)應(yīng)的profile
都會(huì)被激活。如果沒(méi)有匹配的profile
,則什么都不會(huì)發(fā)生。
我們這次需要添加的activeProfile
如下:
<activeProfiles> <activeProfile>corp</activeProfile> <activeProfile>aliyun</activeProfile> <activeProfile>4thline</activeProfile> </activeProfiles>
配置結(jié)果
經(jīng)過(guò)上述配置后,首先我們可以在IDEA的Maven
側(cè)邊欄中,可以看到多了4thline
的profile
。(可以看到IDEA的profiles
是按照首字母排序的,和上文中mirror
的定義是一致的。)
重新執(zhí)行Reload All Maven Projects
,所有的依賴都正常import。
setting.xml完整配置
完整版的setting.xml
如下:
<?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:\Users\xxx\.m2\repository\</localRepository> <pluginGroups> </pluginGroups> <mirrors> <mirror> <id>nexus</id> <mirrorOf>corp</mirrorOf> <name>corp nexus</name> <url>http://maven.corp.com/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>aliyun nexus</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-4thline</id> <mirrorOf>4thline</mirrorOf> <name>4thline nexus</name> <url>http://4thline.org/m2/</url> </mirror> </mirrors> <servers> <server> <id>releases</id> <username>xxx</username> <password>yyy</password> </server> <server> <id>snapshots</id> <username>xxx</username> <password>yyy</password> </server> </servers> <profiles xmlns=""> <profile> <id>corp</id> <repositories> <repository> <id>public</id> <name>all repoes</name> <url>http://maven.corp.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>corp</id> <url>http://maven.corp.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <id>aliyun</id> <repositories> <repository> <id>aliyun</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <profile> <id>4thline</id> <repositories> <repository> <id>4thline</id> <url>http://4thline.org/m2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>corp</activeProfile> <activeProfile>aliyun</activeProfile> <activeProfile>4thline</activeProfile> </activeProfiles> </settings>
結(jié)論
Maven
是每一個(gè)Java程序員都再熟悉不過(guò)的工具,但是我們真的了解它嗎?
任何一個(gè)優(yōu)秀的框架、組件、工具,除了特殊的另外的特殊優(yōu)化外,很多時(shí)候設(shè)計(jì)思路是大體相同的,我們?cè)趯?shí)際工作中不僅僅要擴(kuò)展自己的涉獵領(lǐng)域,更需要在某些領(lǐng)域深入進(jìn)入,對(duì)個(gè)人的提升是更為有益處的。
到此這篇關(guān)于Maven混合配置私有倉(cāng)庫(kù)和公共倉(cāng)庫(kù)的文章就介紹到這了,更多相關(guān)Maven配置私有倉(cāng)庫(kù)和公共倉(cāng)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java中Array和ArrayList的比較和轉(zhuǎn)換
在 Java 編程中,arrays 和 arraylists 都是基本的數(shù)據(jù)結(jié)構(gòu),用來(lái)存放數(shù)據(jù)集合,雖然兩者的用途一樣,但是它們的特點(diǎn)極大地影響應(yīng)用的性能和靈活性,本文探討 arrays 和 arraylists 的重要特性,它們各自的強(qiáng)項(xiàng)和弱點(diǎn),,需要的朋友可以參考下2023-08-08servlet上傳文件實(shí)現(xiàn)代碼詳解(四)
這篇文章主要為大家詳細(xì)介紹了servlet上傳文件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09一文帶你搞懂Java中方法重寫(xiě)與方法重載的區(qū)別
這篇文章主要介紹了Java中方法重寫(xiě)與方法重載有哪些區(qū)別,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-05-05java編寫(xiě)簡(jiǎn)單的ATM存取系統(tǒng)
這篇文章主要介紹了java編寫(xiě)簡(jiǎn)單的ATM存取系統(tǒng),附上思路和具體實(shí)現(xiàn)代碼,適合新人練手用,推薦給小伙伴們。2015-02-02java開(kāi)發(fā)中常遇到的各種難點(diǎn)以及解決思路方案
Java項(xiàng)目是一個(gè)復(fù)雜的軟件開(kāi)發(fā)過(guò)程,其中會(huì)涉及到很多技術(shù)難點(diǎn),這篇文章主要給大家介紹了關(guān)于java開(kāi)發(fā)中常遇到的各種難點(diǎn)以及解決思路方案的相關(guān)資料,需要的朋友可以參考下2023-07-07面試初級(jí)Java開(kāi)發(fā)問(wèn)到Arrays
這篇文章主要介紹了Java Arrays工具類(lèi)用法,結(jié)合實(shí)例形式分析了java Arrays工具類(lèi)針對(duì)數(shù)組元素修改、復(fù)制、排序等操作使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2021-07-07Java Web監(jiān)聽(tīng)器Listener接口原理及用法實(shí)例
這篇文章主要介紹了Java Web監(jiān)聽(tīng)器Listener接口原理及用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式
這篇文章主要介紹了SpringBoot2 參數(shù)管理實(shí)踐,入?yún)⒊鰠⑴c校驗(yàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-06-06