1. 程式人生 > >maven系列-(六)使用Nexus搭建私服

maven系列-(六)使用Nexus搭建私服

前面的文章,在說到maven倉庫的時候,提到過maven私服的概念,maven私服屬於maven遠端倉庫的一種,是在區域網內搭建的一個私有的倉庫伺服器。一般情況下,如果是在一個組織內使用maven的話,都會有自己搭建的maven私服。使用maven私服可以降低中央倉庫的負荷,節省外網頻寬,加速maven構建,自己部署構件等,從而高效的使用maven。而搭建私服用到的工具,一般就是Nexus了。

什麼是Nexus?

Nexus是maven倉庫管理工具,可以通過Nexus搭建私服,管理構件。

Nexus安裝:

Nexus是典型的Java Web應用,有兩種安裝包,一種是包含Jetty容器的Bundle包,一種是不包含Web容器的war包。

Nexus專業版是需要付費的,我們下載開源版Nexus OSS:
https://www.sonatype.com/download-oss-sonatype
在這個地址,下載自己需要的作業系統的版本。下載之後解壓。

我下載了Nexus的bundle包,然後去目錄下解壓,得到兩個子目錄。
在這裡插入圖片描述

其中,nexus-3.14.0-04主要包含Nexus執行所需的啟動指令碼、依賴jar包等檔案。sonatype-work主要包含Nexus生成的配置檔案、日誌檔案、倉庫檔案等。

執行Nexus:

在命令列下,進入nexus-3.14.0-04的bin目錄下,有個nexus檔案,執行./nexus start,就可以啟動nexus了。
啟動之後,瀏覽器輸入http://localhost:8081,可以看到Nexus的主介面:
在這裡插入圖片描述

Nexus提供了預設的管理員使用者,介面的右上角,有個Sign in的按鈕,可以登入,使用者名稱是admin,密碼是admin123。

Nexus倉庫:

Nexus包含了很多型別的倉庫,也提供了很多內建的倉庫,點選左側導航欄中的Browse,一開始看到的這些倉庫都是內建的:
在這裡插入圖片描述

Nexus的倉庫型別,總共有四種:hosted(宿主)、proxy(代理)、group(倉庫組)、virtual(虛擬)。

Nexus的內建倉庫:
maven-central:倉庫型別是proxy,代理maven中央倉庫。該倉庫的策略是RELEASE,只會下載和快取中央倉庫中的釋出版本的構件。
maven-releases:倉庫型別是hosted,策略是RELEASE,用來部署組織內部的釋出版本構件。
maven-snapshots:倉庫型別是hosted,策略是SNAPSHOT,用來部署組織內部的快照版本構件。

倉庫組,一般是用來聚合多個倉庫的,這樣在引入倉庫的時候,只需要寫一個倉庫組的地址就可以了,這個倉庫組再去選擇某個實際的倉庫去下載依賴。Nexus內建倉庫的maven-public就是這樣的一個倉庫,我們可以檢視這個倉庫的詳細資訊:
在這裡插入圖片描述
在這裡插入圖片描述

點選maven-public進去之後,就可以看到這個倉庫組的設定,這個倉庫組聚合了maven-releases、maven-snapshots、maven-central三個倉庫。倉庫組中倉庫的順序,就是遍歷的順序,所以,最好把常用的倉庫放在前面。

使用Nexus:

我們已經搭建了自己的私服,接下來,就要把倉庫的地址,配置成自己搭建的這個私服了,點選maven-public可以看到倉庫的地址:
在這裡插入圖片描述

在我們專案的pom檔案中,配置這個地址就可以了:

<repositories>
    <repository>
        <id>my-nexus</id>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>my-nexus</id>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

上面的配置,就是可以讓專案從自己的maven私服中下載依賴的構件。
接下來再配置上傳的,我們把自己釋出的構建,釋出版本的上傳到maven-releases倉庫,把快照版本的上傳到maven-snapshots倉庫。
在pom中新增如下配置:

<!-- 構件上傳 -->
<distributionManagement>
    <repository>
        <id>my_releases</id>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>my_snapshots</id>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

因為Nexus的倉庫對匿名使用者是隻讀的,所以還需要修改自己本地的setting.xml檔案,新增如下配置:

 <settings>
 ...
    <server>
      <id>my_releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    <server>
      <id>my_snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
...
 </settings>    

修改完之後,在專案路徑下執行mvn deploy命令,可以看到如下資訊:

mvn deploy
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] maven-test                                                         [pom]
[INFO] maven-test-controller                                              [jar]
[INFO] maven-test-service                                                 [jar]
[INFO] maven-test-dao                                                     [jar]
[INFO] 
[INFO] ---------------------< com.baidu.test:maven-test >----------------------
[INFO] Building maven-test 1.0-SNAPSHOT                                   [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ maven-test ---
[INFO] Installing /Users/zhayang/IdeaProjects/maven-test/pom.xml to /Users/zhayang/.m2/repository/com/baidu/test/maven-test/1.0-SNAPSHOT/maven-test-1.0-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ maven-test ---
Downloading from my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/1.0-SNAPSHOT/maven-metadata.xml
Uploading to my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/1.0-SNAPSHOT/maven-test-1.0-20181018.032416-1.pom
Uploaded to my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/1.0-SNAPSHOT/maven-test-1.0-20181018.032416-1.pom (3.3 kB at 15 kB/s)
Downloading from my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/maven-metadata.xml
Uploading to my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/1.0-SNAPSHOT/maven-metadata.xml (597 B at 2.0 kB/s)
Uploading to my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/maven-metadata.xml
Uploaded to my_snapshots: http://localhost:8081/repository/maven-snapshots/com/baidu/test/maven-test/maven-metadata.xml (282 B at 4.1 kB/s)
......

可以從日誌中看到,構建已經上傳到maven-snapshots倉庫,此時再進入這個倉庫,就可以看到內容了。

在這裡插入圖片描述

在這裡插入圖片描述

這裡操作的是通過maven自動上傳構件到Nexus,除此之外,還可以在Nexus介面中,選擇Upload,手動上傳構件。

到這裡,Nexus就介紹完了,主要介紹瞭如何通過Nexus搭建私服,並且通過這個私服下載和上傳構件。

參考資料:
1.《maven實戰》 許曉斌 著