欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven私服倉(cāng)庫(kù)Nexus配置小結(jié)

 更新時(shí)間:2024年08月02日 09:32:49   作者:怪 咖@  
Maven 私服是一種特殊的Maven遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),本文就來(lái)介紹一下Maven私服倉(cāng)庫(kù)Nexus配置小結(jié),具有一定的參考價(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ū)別示例詳解

    這篇文章主要為大家介紹了BeanFactory和FactoryBean的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java Collection 移除元素方法及注意事項(xiàng)

    Java Collection 移除元素方法及注意事項(xiàng)

    這篇文章主要介紹了Java Collection 移除元素方法及注意事項(xiàng),通過(guò)一個(gè)簡(jiǎn)單實(shí)例給大家講解,需要的朋友可以參考下
    2020-01-01
  • Java方法重寫(xiě)的超詳細(xì)講解

    Java方法重寫(xiě)的超詳細(xì)講解

    在 Java 編程的精彩世界里,方法重寫(xiě)是一項(xiàng)極為重要且實(shí)用的特性,它猶如一把神奇的鑰匙,為我們開(kāi)啟了面向?qū)ο缶幊讨卸鄳B(tài)性的大門(mén),今天,就讓我們一同深入探索 Java 方法重寫(xiě)的奧秘,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-03-03
  • java 自定義類(lèi)比較器代碼

    java 自定義類(lèi)比較器代碼

    這篇文章主要介紹了java 自定義類(lèi)比較器代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java類(lèi)中使用Jfreechart的簡(jiǎn)單實(shí)例

    java類(lèi)中使用Jfreechart的簡(jiǎn)單實(shí)例

    這篇文章介紹了java類(lèi)中使用Jfreechart的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-08-08
  • Java實(shí)現(xiàn)支付對(duì)接常用加密方式的示例代碼

    Java實(shí)現(xiàn)支付對(duì)接常用加密方式的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)支付對(duì)接時(shí)常用加密方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一點(diǎn)幫助,需要的可以參考一下
    2023-02-02
  • java開(kāi)發(fā)中遇到的異常匯總詳解

    java開(kāi)發(fā)中遇到的異常匯總詳解

    這篇文章主要介紹了java開(kāi)發(fā)中遇到的異常匯總詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 淺談java中String與StringBuffer的不同

    淺談java中String與StringBuffer的不同

    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í)例

    這篇文章主要介紹了Log4j日志分類(lèi)和過(guò)濾敏感字段的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問(wèn)題

    mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問(wèn)題

    這篇文章主要介紹了mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-02-02

最新評(píng)論