Maven 私服的簡單使用

風的姿態發表於2018-04-13

所有的 Java 開發者應該是沒有沒用過 Maven 的吧。Maven 作為 Java 專案管理工具,它不僅可以用作包管理,還有許多的外掛,可以支援整個專案的開發、打包、測試、部署等一系列行為。而包管理又是其核心功能,這篇文章簡單介紹一下使用 Maven 私服管理依賴包。

當我們再 pom 檔案中依賴了某個包後,如果在沒有做特殊配置(也就是使用 maven 的預設配置)的情況下,Maven 會首先到本地倉庫去搜尋,如果本地倉庫沒有此依賴包,會到中央倉庫獲取,預設的中央倉庫地址是 http://repo1.maven.org/maven2,伺服器在國外,可想而知,速度是沒辦法保證的。當然國內也有相應的倉庫,比如阿里的,速度還是很好的。

但是一般來講,公司甚至團隊內部都會搭建一個 Maven 私服,一來穩定性可以得到保證,再者,比如公司內部的一些基礎包或者專案的通過工具包之類的,也可以放到上面來,從而提高專案開發的靈活度。

例如公司有一個底層工具包,沒有私服的情況下,我們拿到這個包,要將它安裝到本地倉庫,需要執行如下命令:

mvn install:install-file 
-Dfile=common-util-0.0.1-SNAPSHOT.jar 
-DgroupId=com.kite 
-DartifactId=common-util
-Dversion=0.0.1-SNAPSHOT 
-Dpackaging=jar

一旦做了修改,本地還需要重新執行命令,是不是很麻煩。

私服搭建

Nexus 是用來搭建 Maven 私服的可以說是唯一的工具,它的官網上是這樣說的:“世界上第一個也是唯一的免費使用的倉庫解決方案”。目前的最新版本是 OSS 3.x。提供了針對 Windows、Unix、OS X 三種系統的版本。

這裡只簡單說明 Linux 下的安裝方式,如果是下載的最新版本,它對系統記憶體和 jdk 版本是有要求的,要求記憶體大於4G,jdk 最低是1.8版本。

1、下載包,並解壓縮,執行命令 tar -zxvf nexus-version-unix.tar.gz;

2、進入 nexus-version/bin/ 目錄,執行 ./nexus start ;

3、訪問 預設的 8081 埠即可;

通常情況下,以上三步就可以完成安裝,如果有問題,並且提示“ NOT RECOMMENDED TO RUN AS ROOT ”,可以通過修改 /bin/nexus 檔案,在其中加入 RUN_AS_USER=root ,然後重新啟動。

另外,如果是 docker 環境,可以直接獲取 nexus 的映象完成安裝。例如我在 mac 上直接搜尋了 nexus,然後下載並啟動即可。

Maven 私服的簡單使用

基本認識

訪問 nexus 的首頁如下圖所示:
Maven 私服的簡單使用

預設的賬號名是 admin,密碼是admin123。管理員登入後,可以在設定頁面管理角色、使用者等其他一系列的操作。例如建立一個角色,給角色設定某一倉庫的管理許可權,然後向這個角色中新增人員。具體操作不做過多介紹,一看就明白。

管理員還可以管理倉庫,不過一般來說,預設的那幾個倉庫就可以了。預設有如下幾個倉庫:

Maven 私服的簡單使用

說明一下幾種 type。

proxy:這是代理方式,它是用來代理中央倉庫的,例如我們依賴的包在本地倉庫沒有,就會到私服獲取,私服沒有的話,會到中央倉庫先把包下載到這裡,然後再下載到本地倉庫;

hosted:指的是我們公司或團隊內部的包,並且 hosted 型別的倉庫會分為 releases 和 snapshots 兩個,前者是正式版,後者一般是開發測試版;

group:它的目的就是把多個倉庫組合起來,然後我們專案中只需要配置上這個型別的倉庫地址,就可以把它裡面組合的幾個倉庫都關聯上。

在專案中使用

獲取依賴包

如果是普通專案成員,不需要向私服釋出包的,只需要在 pom 檔案中加入以下配置即可。

<repositories>
      <repository>
            <id>maven-public</id>
            <name>maven-public</name>
            <url>http://nexus.local:32768/repository/maven-public/</url>
            <snapshots>
               <enabled>true</enabled>
            </snapshots>
       </repository>
</repositories>

其中 id 要和你的倉庫名稱一致,url 就是私服的倉庫地址,就是type 為 group 的那個,它組合了一個 proxy 型別的和兩個 hosted 型別的倉庫。設定 snapshots 的 enabled 為ture,表示允許下載 snapshots 版本的包。

Maven 私服的簡單使用

釋出包

1、如果需要向倉庫中釋出包的,首先需要對倉庫有許可權才可以,沒有許可權的使用者是沒辦法釋出的。

開啟 maven 的配置檔案 setting.xml ,找到 servers 節點在其中新增 server 節點,使用者名稱和密碼也可以是管理員建立的賬號,但是需要對倉庫有新增許可權。

    <server>
            <id>nexus-releases</id>
            <username>admin</username>
            <password>admin123</password>
        </server>

        <server>
            <id>nexus-snapshots</id>
            <username>admin</username>
            <password>admin123</password>
        </server>

請注意上面的 id,下面還會用到。

2、然後需要在 pom 檔案中配置下面的內容:

<distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>maven-releases</name>
            <url>http://nexus.local:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>maven-snapshots</name>
            <url>http://nexus.local:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
</distributionManagement>

我們看到其中配置了一個 repository ,另外還有一個 snapshotRepository,上面表示的是 releases 版。同樣注意 id 要和 setting.xml 裡 server 下的 id 一致,不然會出現許可權問題。url 分別指定 maven-releases 和 maven-snapshots 的地址。

只要在專案中配置 1.0-SNAPSHOT 這樣,帶有 SNAPSHOT 的就會到 snapshots 倉庫,如果不加 SNAPSHOT 就會到 releases 倉庫。

還有要注意的是,你要釋出的包不應該是上級,也就是不能有 parent 依賴。否則在獲取依賴的時候會有問題。

3、最後執行 mvn clean deploy 命令,即可釋出包到私服倉庫中。

通過以上配置和操作,就可以完成包的釋出過程。

最後

本篇只是一個簡單的介紹,好多細節沒有一一說明,相信沒有用過的小夥伴也能很快配置並使用。如有問題,請留言或者直接在公眾號內回覆。
Maven 私服的簡單使用

也可加微信群,一起來討論技術。
Maven 私服的簡單使用

相關文章