基於滴滴雲 CentOS 伺服器搭建 Nexus Maven 私庫

java06051515發表於2018-12-11

本文講解如何在 滴滴雲 CentOS 伺服器上搭建 Maven 私庫, 筆者假設讀者已經對於 Maven、Java有基本的瞭解,已經知道如何構建一個基本的 Maven 專案。

Maven 私庫在公司的協作開發中是必不可少的工具。 藉助於私庫可以引用公司內部工具包,提高常見 JAR 包下載速度等等。當我們開發一個工具包需要提供給其他業務方需要時,就可以將 JAR 包釋出到 Maven 私庫, 依賴方在  maven pom.xml  中配置該工具包的依賴即可。

接下來,將介紹常見的倉庫管理軟體 Nexus, 搭建一個 Maven 私庫, 並使用其解決 公司內部 JAR 包的釋出與引用

1.安裝 Nexus

1.1 配置 Java 環境

  安裝   java

  sudo  yum  install  java - 1.8.0 - openjdk

配置  JAVA_HOME  環境變數 (Java 目錄預設在  / usr/lib/jvm  下,配置 JDK 目錄為  JAVA_HOME  )

1.2 安裝 Maven

  yum  install  maven

1.3 啟動 Nexus

  1. 下載 Nexus

  wget  https : //sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.2-03-bundle.tar.gz

  1. 解壓

  tar   - zxvf  nexus - 2.11.2 - 03 - bundle . tar . gz

  1. 修改 Nexus 解壓目錄下 bin/nexus

  設定    RUN_AS_USER = root

  1. 啟動 Nexus 服務

    . / nexus  start

  1. 進入 Nexus 管理介面

2. Nexus

Nexus 預設有三個使用者:

  • admin:該使用者擁有 Nexus 的全部許可權,預設密碼為 admin123

  • deployment:該使用者能夠訪問 Nexus,瀏覽倉庫內容、搜尋、上傳部署構件,但是不能對 Nexus 進行任何配置,預設密碼為 deployment123

  • anonymous:該使用者對應了所有未登入的匿名使用者,它們可以瀏覽倉庫並進行搜尋

點選右上角 login 使用 admin, admin123 登陸可以看到

  • A: admin 賬號登入, 注意版本 2.11

  • B: admin 進入,點選 reponsitoris 可以看到倉庫列表

  • C: 在下一節將使用這兩個本地倉庫 釋出共享 JAR 包

2.1 常見倉庫型別

在上圖中可以看到 group,hosted,proxy,virtual 四種倉庫型別

2.1.1 Group

預設倉庫列表中會有一個 public 分組,該分組預設會包括所有倉庫,使用者可以自行新增刪除。

2.1.2 Hosted

Hosted 倉庫用來管理組織內的 JAR 包。例如公司內新開發了一個工具包,可以上傳到 hosted 型別倉庫。

Releases,Snapshots 分別是 release 版和 snapshot 版的倉庫

2.1.3 Poxy

本地倉庫中不存在的包會到 proxy 倉庫中下載,proxy 倉庫需要配置遠端倉庫,即:到哪個倉庫去下載。

2.1.4 Virtual

虛擬倉庫,用來相容 Maven1。

本節簡單講解了 Nexus 的四種倉庫型別,感興趣的讀者可自行深度瞭解各個倉庫型別的使用,下一節將使用 Nexus 自帶的 Releases,Snapshots 兩個本地倉庫,講解如何在公司內釋出引用 JAR 包。

3. 專案實戰

本節,我們將構建兩個 Maven 專案 pro1, pro2 其中 pro2 引用 pro1, 我們將學會如何將專案上傳到倉庫,以及如何引用倉庫中的專案。

3.1 Snapshots、Releases 倉庫

Snapshots 倉庫用來管理快照 JAR 包,例如我們在專案  pom.xml  中看到的:

  < version > 0.1.SNAPSHOT < / version >

  < version > 0.1.RELEASE < / version >

Release 版和 Snapshot 版只是使用版本後的字串區分,在以下的配置我們均使用快照版介紹:

  • A: 倉庫的 ID

  • B: Snapshot 或者 Release 版本

  • C: 可以使用 deploy 將 JAR 包上傳到倉庫。

3.2 pom.xml 配置

透過  pom.xml  中的配置,我們要將專案釋出到 Snapshots 倉庫中, pro1 的  pom.xml  進行以下配置:

在  pom.xml  配置 version 為快照版,配置 GroupID,ArtifactID 象徵性的引用 Gson 和 Junit,在最後我們配置了要釋出的倉庫地址,其中包括 Releases, Snapshots 倉庫。其中倉庫的地址我們可以在倉庫的 Summary 選項卡中找到。一般情況下,在公司內部使用內網 IP 地址訪問Nexus,注意 Snapshots 的 ID 為 Snapshots

只配置倉庫地址就可以釋出嗎?

當然不行! 除此之外,還需要修改預設的 Maven 配置的,在  ~/.m2/  目錄下,新建或者修改  settings.xml

配置檔案新增 Nexus 的賬號密碼:

其中 Releases,Snapshots 是倉庫的 ID。

釋出 pro1 到 Snapshots 倉庫。 ( package:打包; install:把 JAR 放到  ~/.m2  本地倉庫下;deploy:釋出到遠端倉庫)

  mvn  clean  package   install  deploy   - Dmaven . test . skip = true

在 Nexus 上已經可以看到 pro1 已經發布 ( 在 Summary 選項卡可以看到 Snapshots 的引用地址 )。

本節講解了將一個專案釋出到遠端倉庫的步驟與配置,只需要在專案  pom.xml  和 Maven 預設全域性配置  settings.xml  中配置倉庫的地址和賬號即可。

3.3 引用遠端倉庫專案

上一小節,我們已經掌握髮布專案,本節將從 Nexus 引用已釋出的專案。需要說明的是,由於我們在釋出時一般會選擇  mvn package install deploy  其中 install 會將 JAR 包釋出到本地的  ~/.m2/repository  目錄下,實際引用專案時也會優先從本地拉取。

為了驗證配置的正確性,筆者在構建 pro2專案時,是在另一臺伺服器構建的。引用的倉庫地址都不是 localhost。讀者也可以在實踐中也可以嘗試使用不同的機器構建專案,測試是否按照期望從遠端倉庫獲取,而不是從本地獲取。

pro2 的  pom.xml  中配置了對 pro1 的依賴:

如果我們僅僅是想引用遠端倉庫的專案是不需要在  pom.xml  中額外配置的,只需要在 ./m2/settings  配置賬號密碼以及倉庫即可。

在 settings 中需要配置遠端倉庫的地址即可,同時還需要配置 activeProfiles, 標識啟用哪個配置,實際中可配多個 profile, 透過 activeProfile 控制啟動哪個。

現在我們可以利用 Nexus 釋出引用 JAR 包了,但是還是有幾點需要讀者注意:

  1. 在本文中使用的賬號都是 admin,由於 admin 賬號許可權過大,應該使用 deployment 賬號,或者每個使用者一個賬號

  2. 當需要釋出專案到 Nexus,需要配置遠端倉庫地址,實際可以透過 Maven 的  parent  引用父級專案解決的。在父級專案中配置通用的  pom.xml ,子專案就不需要重複複製貼上配置

  3. 私有倉庫可以配置映象策略,快取已經下載的 JAR 包,這樣可以提高速度,不需要每次都從中央倉庫下載了


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2284764/,如需轉載,請註明出處,否則將追究法律責任。

相關文章