Maven私服倉(cāng)庫(kù)Nexus配置小結(jié)
技術(shù)前提:熟練的掌握Maven基礎(chǔ)知識(shí)
一、什么是Maven私服?
Maven 私服是一種特殊的Maven遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),用來(lái)代理位于外部的遠(yuǎn)程倉(cāng)庫(kù)(中央倉(cāng)庫(kù)、其他遠(yuǎn)程公共倉(cāng)庫(kù))。
當(dāng)然也并不是說(shuō)私服只能建立在局域網(wǎng),也有很多公司會(huì)直接把私服部署到公網(wǎng),具體還是得看公司業(yè)務(wù)的性質(zhì)是否是保密的等等,因?yàn)榫钟蚓W(wǎng)的話(huà)只能在公司用,部署到公網(wǎng)的話(huà)員工在家里也可以辦公使用。
建立了 Maven 私服后,當(dāng)局域網(wǎng)內(nèi)的用戶(hù)需要某個(gè)構(gòu)件時(shí),會(huì)按照如下順序進(jìn)行請(qǐng)求和下載。
- 請(qǐng)求本地倉(cāng)庫(kù),若本地倉(cāng)庫(kù)不存在所需構(gòu)件,則跳轉(zhuǎn)到第 2 步;
- 請(qǐng)求 Maven 私服,將所需構(gòu)件下載到本地倉(cāng)庫(kù),若私服中不存在所需構(gòu)件,則跳轉(zhuǎn)到第 3 步。
- 請(qǐng)求外部的遠(yuǎn)程倉(cāng)庫(kù),將所需構(gòu)件下載并緩存到 Maven 私服,若外部遠(yuǎn)程倉(cāng)庫(kù)不存在所需構(gòu)件,則 Maven 直接報(bào)錯(cuò)。
此外,一些無(wú)法從外部倉(cāng)庫(kù)下載到的構(gòu)件,也能從本地上傳到私服供其他人使用。
下圖中展示了 Maven 私服的用途。
二、Maven 私服優(yōu)勢(shì)
Maven 私服具有以下 5 點(diǎn)優(yōu)勢(shì):
節(jié)省外網(wǎng)帶寬
:大量對(duì)于外部遠(yuǎn)程倉(cāng)庫(kù)的重復(fù)請(qǐng)求,會(huì)消耗很大量的帶寬,利用 Maven私服代理外部倉(cāng)庫(kù)后,能夠消除對(duì)外部倉(cāng)庫(kù)的大量重復(fù)請(qǐng)求,降低外網(wǎng)帶寬壓力。下載速度更快
:Maven 私服位于局域網(wǎng)內(nèi),從私服下載構(gòu)建更快更穩(wěn)定。便于部署第三方構(gòu)件
:有些構(gòu)件是無(wú)法從任何一個(gè)遠(yuǎn)程倉(cāng)庫(kù)中獲得的(例如,某公司或組織內(nèi)部的私有構(gòu)件、Oracle 的 JDBC 驅(qū)動(dòng)等),建立私服之后,就可以將這些構(gòu)件部署到私服中,供內(nèi)部 Maven 項(xiàng)目使用。提高項(xiàng)目的穩(wěn)定性,增強(qiáng)對(duì)項(xiàng)目的控制
:如果不建立私服,那么 Maven 項(xiàng)目的構(gòu)件就高度依賴(lài)外部的遠(yuǎn)程倉(cāng)庫(kù),若外部網(wǎng)絡(luò)不穩(wěn)定,則項(xiàng)目的構(gòu)建過(guò)程也會(huì)變得不穩(wěn)定。建立私服后,即使外部網(wǎng)絡(luò)狀況不佳甚至中斷,只要私服中已經(jīng)緩存了所需的構(gòu)件,Maven 也能夠正常運(yùn)行。- 此外,一些私服軟件(如 Nexus)還提供了很多額外控制功能,例如,權(quán)限管理、RELEASE/SNAPSHOT 版本控制等,可以對(duì)倉(cāng)庫(kù)進(jìn)行一些更加高級(jí)的控制
降低中央倉(cāng)庫(kù)得負(fù)荷壓力
:由于私服會(huì)緩存中央倉(cāng)庫(kù)得構(gòu)件,避免了很多對(duì)中央倉(cāng)庫(kù)的重復(fù)下載,降低了中央倉(cāng)庫(kù)的負(fù)荷。
三、Maven 私服搭建
能夠幫助我們建立 Maven 私服的軟件被稱(chēng)為 Maven 倉(cāng)庫(kù)管理器(Repository Manager),主要有以下 3 種:
- Apache Archiva
- JFrog Artifactory
- Sonatype Nexus
其中,Sonatype Nexus 是當(dāng)前最流行、使用最廣泛的 Maven 倉(cāng)庫(kù)管理器。本篇文章也是重點(diǎn)講解Sonatype Nexus。
關(guān)于nexus安裝:http://www.dbjr.com.cn/article/213578.htm
本篇直接基于nexus3最新版進(jìn)行講解!
四、Sonatype Nexus介紹
Nexus 的全稱(chēng)是 Nexus Repository Manager(Nexus 倉(cāng)庫(kù)管理器),是 Sonatype 公司的一個(gè)產(chǎn)品。Nexus 是一個(gè)強(qiáng)大的倉(cāng)庫(kù)管理器,極大地簡(jiǎn)化了內(nèi)部倉(cāng)庫(kù)的維護(hù)和外部倉(cāng)庫(kù)的訪問(wèn)。Nexus 分為開(kāi)源版和專(zhuān)業(yè)版,其中開(kāi)源版足以滿(mǎn)足大部分 Maven 用戶(hù)的需求。
Nexus 開(kāi)源版具有以下優(yōu)點(diǎn):
- 占用內(nèi)存?。?8 M 左右)
- 具有基于 ExtJs 得操作界面,用戶(hù)體驗(yàn)較好
- 使用基于 Restlet 的完全 REST API
- 支持代理倉(cāng)庫(kù)、宿主倉(cāng)庫(kù)和倉(cāng)庫(kù)組
- 基于文件系統(tǒng),不需要依賴(lài)數(shù)據(jù)庫(kù)
- 支持倉(cāng)庫(kù)管理
- 支持構(gòu)件搜索
- 支持在界面上上傳構(gòu)件
五、Nexus倉(cāng)庫(kù)屬性和分類(lèi)
這里我直接用的nexus最新版3.54.1版本。
點(diǎn)擊左邊導(dǎo)航欄中的 Repositories(倉(cāng)庫(kù)),可以看到 Nexus 自帶的幾個(gè)內(nèi)置倉(cāng)庫(kù),如下圖所示。
在倉(cāng)庫(kù)列表中,每個(gè)倉(cāng)庫(kù)都具有一系列屬性:
- Type:倉(cāng)庫(kù)的類(lèi)型,這里一共有三種
- proxy:用來(lái)代理遠(yuǎn)程公共倉(cāng)庫(kù),如 Maven 中央倉(cāng)庫(kù)、JBoss 遠(yuǎn)程倉(cāng)庫(kù)。
- hosted:又稱(chēng) Nexus 本地倉(cāng)庫(kù),該倉(cāng)庫(kù)通常用來(lái)部署本地項(xiàng)目所產(chǎn)生的構(gòu)件。 hosted 宿主倉(cāng)庫(kù)又分為:releases 和shapshots,分別表示依賴(lài)的版本的發(fā)行版、快照版??煺瞻嬉蕾?lài)不能上傳到發(fā)行版?zhèn)}庫(kù),反之亦然。nexus做了限制。
- group:倉(cāng)庫(kù)組,用來(lái)聚合代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù),為這些倉(cāng)庫(kù)提供統(tǒng)一的服務(wù)地址,以便 Maven 可以更加方便地獲得這些倉(cāng)庫(kù)中的構(gòu)件。
- Format:倉(cāng)庫(kù)的格式有兩種maven2、nuget。我們是搞java的,所以新建倉(cāng)庫(kù)一般都是選擇的maven2格式。
- Status:倉(cāng)庫(kù)的狀態(tài),只有在線(xiàn)狀態(tài)才能被訪問(wèn)。
- URL:倉(cāng)庫(kù)的路徑
為了更加直觀的理解倉(cāng)庫(kù)組、代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù)的概念,我們通過(guò)下圖展示它們的用途和區(qū)別。
由上圖可知:
- Maven 可以直接從宿主倉(cāng)庫(kù)中下載構(gòu)件。
- Maven 也可以從代理倉(cāng)庫(kù)中下載構(gòu)件,代理倉(cāng)庫(kù)會(huì)從遠(yuǎn)程倉(cāng)庫(kù)下載并緩存構(gòu)件。
- Maven 還可以從倉(cāng)庫(kù)組中下載構(gòu)件,倉(cāng)庫(kù)組會(huì)從其包含的宿主倉(cāng)庫(kù)和代理倉(cāng)庫(kù)中獲取構(gòu)件。
我們使用nexus私服,配置文件中配置的也就是倉(cāng)庫(kù)組地址,因?yàn)閭}(cāng)庫(kù)組可以把代理倉(cāng)庫(kù)、宿主倉(cāng)庫(kù)聚合,這樣就完美實(shí)現(xiàn):從私服下載依賴(lài),私服倉(cāng)庫(kù)找不到還能去代理倉(cāng)庫(kù)那找。找到了之后緩存到私服這樣下次就能從私服直接獲取了。
六、Nexus倉(cāng)庫(kù)配置以及創(chuàng)建倉(cāng)庫(kù)
剛安裝好的nexus一共給我們創(chuàng)建了7個(gè)倉(cāng)庫(kù)(不同的nexus版本可能有一點(diǎn)差距),我們只需要關(guān)注Format為maven2的倉(cāng)庫(kù)即可,也就是一共有4個(gè):
- maven-central:該倉(cāng)庫(kù)用來(lái)代理 Maven 中央倉(cāng)庫(kù),其策略為 Release,只會(huì)下載和緩存中央倉(cāng)庫(kù)中的發(fā)布版本的構(gòu)件。
- maven-releases:策略為 Release 的宿主倉(cāng)庫(kù),用來(lái)部署公司或組織內(nèi)部的發(fā)布版本構(gòu)件。
- maven-snapshots:策略為 Snapshot 的宿主倉(cāng)庫(kù),用來(lái)部署公司或組織內(nèi)部的快照版本構(gòu)件。
- maven-public:倉(cāng)庫(kù)組,默認(rèn)聚合了以上三個(gè)倉(cāng)庫(kù)
下面進(jìn)行一個(gè)一個(gè)講解:
(1)maven-central
我們也可以再新建一個(gè)代理倉(cāng)庫(kù),然后代理到阿里云鏡像地址。通過(guò)阿里云鏡像下載依賴(lài)要比maven中央倉(cāng)庫(kù)快的多。
選擇maven2 (proxy)
其他配置默認(rèn)即可。然后代理地址寫(xiě):
https://maven.aliyun.com/repository/public
(2)maven-public
maven-public倉(cāng)庫(kù)組就是將這幾個(gè)倉(cāng)庫(kù)匯集到一塊,然后項(xiàng)目使用nexus,不需要配置其他倉(cāng)庫(kù)的地址,只需要配置倉(cāng)庫(kù)組的地址即可。
(3)maven-releases
release倉(cāng)庫(kù)需要把這塊改一下,設(shè)置為Allow redeploy代表允許我們對(duì)倉(cāng)庫(kù)中的依賴(lài)維護(hù)升級(jí)新版本,如果設(shè)置為disable redeploy意味著我們無(wú)法將升級(jí)版本上傳上來(lái)。
七、Nexus配置用戶(hù)角色
nexus預(yù)定了兩個(gè)用戶(hù)
admin:最高權(quán)限
- 瀏覽倉(cāng)庫(kù)
- 搜索倉(cāng)庫(kù)
- 上傳構(gòu)建
- 新建修改倉(cāng)庫(kù)
anonymous:沒(méi)有默認(rèn)密碼,不可以登錄管理平臺(tái),擁有的權(quán)限有如下:
- 瀏覽倉(cāng)庫(kù)
- 搜索倉(cāng)庫(kù)
在低的版本當(dāng)中可能會(huì)有一個(gè)deployment角色,不知道為什么新的版本當(dāng)中這個(gè)角色給取消了。
一般我們不建議maven當(dāng)中直接去配置admin賬戶(hù),因?yàn)閍dmin賬戶(hù)有新增和刪除倉(cāng)庫(kù)的權(quán)限,我們可以選擇新增一個(gè)賬戶(hù),只給這個(gè)賬號(hào)賦予上傳依賴(lài)和下載依賴(lài)的權(quán)限即可,由于nexus是用戶(hù)角色制,所以新增賬戶(hù)前,首先我們需要新建一個(gè)角色。然后讓角色只具備上傳依賴(lài)和下載依賴(lài)的權(quán)限。然后再給用戶(hù)賦予該角色權(quán)限。
(1)新增角色
Role ID和Role Name自定義即可。
具體的需要新增的權(quán)限如下:
別忘了右下角保存!
(2)新增用戶(hù),并指定該角色
這時(shí)候可以使用新賬號(hào)登錄測(cè)試一下,登錄后會(huì)發(fā)現(xiàn)他沒(méi)有設(shè)置的權(quán)限,這就是我們要的效果!
八、Maven SNAPSHOT(快照)
接下來(lái)我們可能會(huì)頻繁接觸SNAPSHOT版本,在這里我們先熟悉一下這個(gè)版本號(hào)。
在我們是實(shí)際開(kāi)發(fā)的項(xiàng)目當(dāng)中很少會(huì)定義beat 、alpha 這些里程碑版本,因?yàn)檫@些一般都是開(kāi)源框架才會(huì)定義的,他代表了一個(gè)特殊的寓意,例如beat就是測(cè)試版本,而我們經(jīng)常在開(kāi)發(fā)中會(huì)定義SNAPSHOT版本。SNAPSHOT不同于里程碑版本,里程碑版本他也就是一個(gè)普通的版本名稱(chēng),說(shuō)白了只是用這些英文來(lái)代表這個(gè)版本的含義,而SNAPSHOT對(duì)于私服來(lái)說(shuō)是有特殊功能的。
使用場(chǎng)景: 大型的應(yīng)用軟件通常由多個(gè)功能模塊組成,這些模塊有時(shí)候分別于不同的團(tuán)隊(duì)負(fù)責(zé)開(kāi)發(fā)。假設(shè)有兩個(gè)團(tuán)隊(duì),他們分別負(fù)責(zé)項(xiàng)目中的 member-service(會(huì)員服務(wù)) 和 user-service(用戶(hù)服務(wù)) 兩個(gè)模塊,且 member-service 需要依賴(lài) user-service 項(xiàng)目。
基于以上假設(shè),若 user-service 團(tuán)隊(duì)正在進(jìn)行快節(jié)奏的 bug 修復(fù)及功能增強(qiáng),會(huì)在短時(shí)間內(nèi)高頻率地更新代碼以及發(fā)布版本。就會(huì)出現(xiàn)以下情況:
- user-service 團(tuán)隊(duì)每次發(fā)布新版本更新代碼時(shí),都應(yīng)該通知member-service團(tuán)隊(duì)。
- member-service 團(tuán)隊(duì)則需要定期更新其 pom.xml 以獲得最新的版本。
這樣,勢(shì)必會(huì)影響開(kāi)發(fā)效率,甚至?xí)绊戫?xiàng)目的驗(yàn)收及投產(chǎn)。要解決這個(gè)問(wèn)題,其實(shí)很簡(jiǎn)單,那就是使用 SNAPSHOT(快照)版本。
版本介紹: SNAPSHOT(快照)是一種特殊的版本,它表示當(dāng)前開(kāi)發(fā)進(jìn)度的副本。與常規(guī)版本不同,快照版本的構(gòu)件在發(fā)布時(shí),Maven 會(huì)自動(dòng)為它打上一個(gè)時(shí)間戳,有了這個(gè)時(shí)間戳后,當(dāng)依賴(lài)該構(gòu)件的項(xiàng)目進(jìn)行構(gòu)建時(shí),Maven 就能從倉(cāng)庫(kù)中找到最新的 SNAPSHOT 版本文件。
默認(rèn)情況下對(duì)于快照本本的構(gòu)件,Maven 會(huì)每天從倉(cāng)庫(kù)中獲取一次更新,用戶(hù)也可以在任何 Maven 命令中使用 -U
參數(shù)強(qiáng)制 Maven 檢查更新。命令如下:mvn clean package -U
SNAPSHOT 版本 VS RELEASE 版本
Maven 倉(cāng)庫(kù)分為兩種,Snapshot 快照倉(cāng)庫(kù)和 Release 發(fā)行倉(cāng)庫(kù)。Snapshot 快照倉(cāng)庫(kù)用于保存開(kāi)發(fā)過(guò)程中的不穩(wěn)定 SNAPSHOT 版本,Release 發(fā)行倉(cāng)庫(kù)則用來(lái)保存穩(wěn)定的 RELEASE 版本。Maven 會(huì)根據(jù)模塊的版本號(hào)(pom.xml 文件中的 version 元素)中是否帶有 -SNAPSHOT 來(lái)判斷是 SNAPSHOT 版本還是正式 RELEASE 版本。帶有 -SNAPSHOT 是SNAPSHOT(快照)版本,不帶 -SNAPSHOT 的就是正式 RELEASE(發(fā)布)版本。
九、項(xiàng)目當(dāng)中配置Nexus上傳依賴(lài)
首先找到本地maven的setting.xml(在maven安裝目錄的conf目錄下),打開(kāi)后找到servers標(biāo)簽。加入以下內(nèi)容
<servers> <!-- 這是配置訪問(wèn)私有倉(cāng)庫(kù)的用戶(hù)名密碼 --> <server> <!-- id標(biāo)簽可以隨便填,只需要在servers中唯一即可,后面很多地方會(huì)使用該id --> <id>self-maven</id> <username>deplyment</username> <password>deplyment123</password> </server> </servers>
maven配置好了,接下來(lái)去maven項(xiàng)目中設(shè)置:
在你想上傳的模塊的pom文件中,寫(xiě)入:
<distributionManagement> <repository> <!--注意這個(gè)id一定要填寫(xiě)我們maven的setting.xml當(dāng)中配置的id--> <id>self-maven</id> <url>http://ip:port/repository/maven-releases/</url> </repository> <snapshotRepository> <!--注意這個(gè)id一定要填寫(xiě)我們maven的setting.xml當(dāng)中配置的id--> <id>self-maven</id> <url>http://ip:port/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
- distributionManagement:負(fù)責(zé)將指定的構(gòu)件部署到 Nexus 指定的倉(cāng)庫(kù)中。
- repository:代表上傳release版本存儲(chǔ)的倉(cāng)庫(kù)地址
- snapshotRepository:代表上傳snapshot版本存儲(chǔ)的倉(cāng)庫(kù)地址
- 標(biāo)簽中的 id,就是上面我們配置的server id,maven會(huì)通過(guò)這個(gè)id去server中拿用戶(hù)名密碼去訪問(wèn)私服倉(cāng)庫(kù)。
- 標(biāo)簽中的url,就是對(duì)應(yīng)倉(cāng)庫(kù)的地址:倉(cāng)庫(kù)的url復(fù)制即可,注意對(duì)應(yīng)倉(cāng)庫(kù),弄反了是傳不上去的
會(huì)根據(jù)該模塊的版本進(jìn)行自動(dòng)選擇,如果你的版本號(hào)帶有SNAPSHOT如:
<version>0.0.1-SNAPSHOT</version>
,那么會(huì)上傳到SNAPSHOT倉(cāng)庫(kù),release也是這個(gè)道理,如果版本號(hào)不存在這兩個(gè)單詞,如1.0.0,那么會(huì)選擇release倉(cāng)庫(kù)上傳。
(1)接下來(lái)我們進(jìn)行測(cè)試,首先第一步準(zhǔn)備一個(gè)不是web工程的項(xiàng)目,如下:
(2)然后進(jìn)行以下步驟:
當(dāng)然也可以直接運(yùn)行maven命令:mvn clean deploy -DskipTests
(3)deploy執(zhí)行完不報(bào)錯(cuò)的話(huà)就上傳成功了。
(4)由于我的項(xiàng)目設(shè)置的是1.0-SNAPSHOT,也就是SNAPSHOT版本,所以他會(huì)自動(dòng)上傳到maven-snapshots倉(cāng)庫(kù)當(dāng)中,如下:
十、項(xiàng)目當(dāng)中配置Nexus下載依賴(lài)
接下來(lái),配置本地maven。還是打開(kāi)setting.xml,然后添加一個(gè)如下配置:
<profiles> <profile> <id>nexus</id> <!--聲明一個(gè)或多個(gè)遠(yuǎn)程倉(cāng)庫(kù) --> <repositories> <!-- 聲明一個(gè) Nexus 私服上的倉(cāng)庫(kù) --> <repository> <!--倉(cāng)庫(kù)id,這個(gè)id就是上面配置的賬號(hào)密碼id --> <id>self-maven</id> <!-- 倉(cāng)庫(kù)的名稱(chēng) --> <name>nexus</name> <!--倉(cāng)庫(kù)的地址 --> <url>http://localhost:8081/repository/maven-public/</url> <!-- 是否開(kāi)啟該倉(cāng)庫(kù)的 release 版本下載支持 --> <releases> <enabled>true</enabled> </releases> <!-- 是否開(kāi)啟該倉(cāng)庫(kù)的 snapshot 版本下載支持 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <!-- 聲明一個(gè)或多個(gè)遠(yuǎn)程插件倉(cāng)庫(kù) --> <pluginRepositories> <!--聲明一個(gè) Nexus 私服上的插件倉(cāng)庫(kù) --> <pluginRepository> <!--插件倉(cāng)庫(kù) id --> <id>self-maven</id> <!--插件倉(cāng)庫(kù) 名稱(chēng) --> <name>nexus</name> <!-- 配置的插件倉(cāng)庫(kù)的地址 --> <url>http://localhost:8081/repository/maven-public/</url> <!-- 是否開(kāi)啟該插件倉(cāng)庫(kù)的 release 版本下載支持 --> <releases> <enabled>true</enabled> </releases> <!-- 是否開(kāi)啟該插件倉(cāng)庫(kù)的 snapshot 版本下載支持 --> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> <!-- 默認(rèn)該profile生效 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
以上配置中使用了一個(gè) id 為 nexus 的 profile,這個(gè) profile 中包含了與倉(cāng)庫(kù)相關(guān)的配置,同時(shí)配置中activeByDefault為true。當(dāng)本機(jī)有 Maven 項(xiàng)目構(gòu)建時(shí),profile 中的倉(cāng)庫(kù)配置就會(huì)應(yīng)用到項(xiàng)目中。配置當(dāng)中的url就配置我們的倉(cāng)庫(kù)組地址即可:
(1)接下來(lái)進(jìn)行測(cè)試下載依賴(lài),首先讓一個(gè)web工程引用該項(xiàng)目坐標(biāo)
(2)緊接著我們需要找到本地maven倉(cāng)庫(kù)當(dāng)中的introduce包給刪除掉
根據(jù)坐標(biāo)就可以在本地倉(cāng)庫(kù)找到進(jìn)行刪除,刪除前要保證引用該依賴(lài)的工程不是啟動(dòng)狀態(tài),不然刪除不了
(3)再次測(cè)試web工程看看能否獲取到依賴(lài),需要刷新該工程,讓他再次去獲取依賴(lài)。
(4)刷新過(guò)后查看倉(cāng)庫(kù)已經(jīng)存在了該依賴(lài)jar,我們并沒(méi)有手動(dòng)去install該項(xiàng)目,那也就意味著他是通過(guò)私服進(jìn)行下載的。
(5)假如缺少依賴(lài),除了上面通過(guò)idea當(dāng)中的刷新,也可以選擇執(zhí)行命令來(lái)下載依賴(lài),mvn clean install
的時(shí)候也會(huì)自動(dòng)下載倉(cāng)庫(kù)當(dāng)中缺少的依賴(lài),通過(guò)下載依賴(lài)的信息我們可以知道他從哪個(gè)倉(cāng)庫(kù)進(jìn)行下載依賴(lài)的:
Nexus 私服通常會(huì)與鏡像(mirror)結(jié)合使用,使 Nexus 成為所有遠(yuǎn)程倉(cāng)庫(kù)的私服,這樣不僅可以從 Nexus 中獲取所有所需構(gòu)件,還能將配置集中到 Nexus 私服中,簡(jiǎn)化 Maven 本身的配置。
我們可以創(chuàng)建一個(gè)匹配任何倉(cāng)庫(kù)的鏡像,鏡像的地址為 Nexus 中倉(cāng)庫(kù)的地址,這樣 Maven 對(duì)于任何構(gòu)件的下載請(qǐng)求都會(huì)被攔截跳轉(zhuǎn)到 Nexus 私服中,在maven的setting.xml當(dāng)中配置,其具體配置如下。
<mirrors> <mirror> <id>self-maven</id> <name>nexus name</name> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-public/</url> </mirror> </mirrors>
之前阿里的鏡像可以注釋了,添加的鏡像標(biāo)簽解釋?zhuān)?/p>
- id:之前server的id,訪問(wèn)倉(cāng)庫(kù)組也要拿用戶(hù)名密碼
- mirrorOf:
*
代表所有的依賴(lài)都從私服找 - url:就是倉(cāng)庫(kù)組的,還是去倉(cāng)庫(kù)組右邊copy即可
這樣的話(huà)項(xiàng)目就完全依賴(lài)于nexus倉(cāng)庫(kù)了,假如一旦nexus掛了,整個(gè)項(xiàng)目都沒(méi)辦法下載包了,這時(shí)候可以將鏡像替換為阿里云,這樣一來(lái)除了公司內(nèi)部包無(wú)法下載,最起碼中央倉(cāng)庫(kù)的包還是可以下載的。
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
十一、測(cè)試SNAPSHOT版本
我們基于上面提到的introduce工程和demo工程再順便測(cè)一下SNAPSHOT版本。一般SNAPSHOT版本是為了解決多個(gè)人同時(shí)開(kāi)發(fā)所產(chǎn)生的問(wèn)題,而我沒(méi)有多臺(tái)電腦,所以模擬起來(lái)也比較費(fèi)勁。
(1)我們需要手動(dòng)保留一份倉(cāng)庫(kù)當(dāng)中修改前的代碼。
(2)修改一下introduce工程,然后將該工程重新deploy到倉(cāng)庫(kù)。
(3)刪除本地倉(cāng)庫(kù)的introduce工程,將剛剛備份的introduce1改為introduce。這時(shí)候introduce1的工程代碼當(dāng)中那個(gè)輸出的還是1111111。
(4)看看demo工程通過(guò)mvn clean install -DskipTests -U
(-U是強(qiáng)制更新)是否會(huì)更新
(5)成功更新了
十二、Nexus構(gòu)件搜索
十三、手動(dòng)上傳構(gòu)件
有些 Jar 文件(如 Oracle 的 JDBC 驅(qū)動(dòng))由于許可證等原因,無(wú)法存放在公開(kāi)倉(cāng)庫(kù)中。此外,還有一些小型的開(kāi)源項(xiàng)目,它們沒(méi)有將自己的構(gòu)件分發(fā)到公共倉(cāng)庫(kù)中,也沒(méi)有維護(hù)自己的倉(cāng)庫(kù),因此這些構(gòu)件是無(wú)法從公共倉(cāng)庫(kù)中獲得的。若 Maven 項(xiàng)目中需要這類(lèi)構(gòu)件,我們就需要將構(gòu)件下載到本地,然后手動(dòng)上傳到 Nexus 私服。
(1)準(zhǔn)備一個(gè)項(xiàng)目,版本號(hào)不要是SNAPSHOT版本的
(2)mvn clean install,進(jìn)行打包
(3)在 Nexus 界面的upoad上傳,默認(rèn)是只允許上傳releases倉(cāng)庫(kù)。
生成的就是一個(gè)帶有該項(xiàng)目坐標(biāo)的pom。
如果該jar包還有其他依賴(lài),那么需要手動(dòng)上傳pom.xml文件,就不能點(diǎn)擊上面的generate生成了,通過(guò)點(diǎn)擊add another asset 增加,操作如下
手動(dòng)上傳jar需要注意:
首先,打包要打成不可執(zhí)行jar包;其次,jar如果有其他依賴(lài),一定要單獨(dú)上傳pom.xml文件,否則關(guān)聯(lián)依賴(lài)無(wú)法拉取
十四、關(guān)于nexus代理倉(cāng)庫(kù)狀態(tài)
online-remote available:表示該被代理倉(cāng)庫(kù)可用online-ready to connect:并不是代理倉(cāng)庫(kù)用不了。而是你根本還沒(méi)有一個(gè)依賴(lài)去訪問(wèn)這個(gè)被代理倉(cāng)庫(kù),nexus也不知道這個(gè)被代理倉(cāng)庫(kù)能不能用,所以它只能展示為待連接狀態(tài)。
新建的代理倉(cāng)庫(kù)都是 online-ready to connect狀態(tài)。
代理倉(cāng)庫(kù)還有一個(gè)如下配置:
Blocked:假如選中相相當(dāng)于禁用該代理倉(cāng)庫(kù)。Auto blocking:該配置:表示代理倉(cāng)庫(kù)會(huì)根據(jù)每次請(qǐng)求被代理倉(cāng)庫(kù)的響應(yīng)來(lái)決定是否暫停請(qǐng)求這個(gè)被代理倉(cāng)庫(kù),請(qǐng)求無(wú)響應(yīng)就會(huì)block。
到此這篇關(guān)于Maven私服倉(cāng)庫(kù)Nexus配置小結(jié)的文章就介紹到這了,更多相關(guān)Nexus 配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
BeanFactory和FactoryBean的區(qū)別示例詳解
這篇文章主要為大家介紹了BeanFactory和FactoryBean的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java Collection 移除元素方法及注意事項(xiàng)
這篇文章主要介紹了Java Collection 移除元素方法及注意事項(xiàng),通過(guò)一個(gè)簡(jiǎn)單實(shí)例給大家講解,需要的朋友可以參考下2020-01-01java類(lèi)中使用Jfreechart的簡(jiǎn)單實(shí)例
這篇文章介紹了java類(lèi)中使用Jfreechart的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-08-08Java實(shí)現(xiàn)支付對(duì)接常用加密方式的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)支付對(duì)接時(shí)常用加密方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一點(diǎn)幫助,需要的可以參考一下2023-02-02- String在棧中,StringBuffer在堆中!所以String是不可變的,數(shù)據(jù)是共享的。StringBuffer都是獨(dú)占的,是可變的(因?yàn)槊看味际莿?chuàng)建新的對(duì)象?。?/div> 2015-11-11
Log4j日志分類(lèi)和過(guò)濾敏感字段的實(shí)例
這篇文章主要介紹了Log4j日志分類(lèi)和過(guò)濾敏感字段的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問(wèn)題
這篇文章主要介紹了mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-02-02最新評(píng)論