大家公司用的 Maven 私服就是這麼搭建的

我是風箏,公衆號「古時的風箏」,一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!
文章會收錄在 JavaNewBee 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裏面。

差很少全部的 Java 開發者應該都用過 Maven 的吧,若是你沒用過,那可能你正在用的是 Gradle,若是這倆你都沒用過,那就有點不太正常了。順道說一句,在 Gradle 眼裏,Maven 什麼的都是垃圾。git

Maven 做爲 Java 項目管理工具,它不只能夠用做包管理,還有許多的插件,能夠支持整個項目的開發、打包、測試、部署等一系列行爲。程序員

而包管理又是其核心功能,除非是我的項目,咱們獲取包都是從中央倉庫或者 github 獲取,可是公司項目呢,爲了提供高速,通常都會搭建公司內部或者團隊內部的 Maven 私服倉庫。github

爲何要搭建私服

當咱們再 pom 文件中依賴了某個包後,若是在沒有作特殊配置(也就是使用 maven 的默認配置)的狀況下,Maven 會首先到本地倉庫去搜索,若是本地倉庫沒有此依賴包,會到中央倉庫獲取,默認的中央倉庫地址是 http://repo1.maven.org/maven2,服務器在國外,可想而知,速度是沒辦法保證的。有時候運氣很差,晚上拉下來一個開源項目,執行 Maven 包安裝,早上睡醒了一看,還沒下載完,你說來氣不。docker

固然國內也有相應的倉庫,好比阿里的,速度仍是很好的。shell

可是通常來說,公司甚至團隊內部都會搭建一個 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

一旦作了修改,本地還須要從新執行命令,是否是很麻煩。bash

私服搭建流程

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

這裏只簡單說明 Linux 下的安裝方式,若是是下載的最新版本,它對系統內存和 jdk 版本是有要求的,要求內存大於4G,jdk 最低是1.8版本。maven

  1. 下載包,並解壓縮,運行命令
tar -zxvf nexus-version-unix.tar.gz
  1. 進入 nexus-version/bin/` 目錄,執行命令 ./nexus start
  2. 訪問 默認的 8081 端口便可

沒錯,就是這麼簡單。

一般狀況下,以上三步就能夠完成安裝,若是有問題,而且提示「 NOT RECOMMENDED TO RUN AS ROOT 」,能夠經過修改 /bin/nexus 文件,在其中加入 RUN_AS_USER=root ,而後從新啓動便可。

另外,若是是 docker 環境,能夠直接獲取 nexus 的鏡像完成安裝。例如我在 mac 上直接搜索了 nexus,而後下載並啓動便可。

初識 Nexus

當咱們經過地址,在瀏覽器上訪問 nexus 的首頁,是下圖這樣子的:

默認的帳號名是 admin,密碼是 admin123。管理員登陸後,能夠在設置頁面管理角色、用戶等其餘一系列的操做。例如建立一個角色,給角色設置某一倉庫的管理權限,而後向這個角色中添加人員。具體操做不作過多介紹,一看就明白。

管理員還能夠管理倉庫,不過通常來講,默認的那幾個倉庫就能夠了。默認有以下幾個倉庫:

幾種 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 版本的包。

發佈(deploy)包

  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,一下子在 pom 文件中還會用到。

  1. 而後須要在 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 的地址。

只要在項目中配置 <version>1.0-SNAPSHOT</version> 這樣,帶有 SNAPSHOT 的就會到 snapshots 倉庫,若是不加 SNAPSHOT 就會到 releases 倉庫。

還有要注意的是,你要發佈的包不該該是上級,也就是不能有 parent 依賴。不然在獲取依賴的時候會有問題。

  1. 最後執行 mvn clean deploy 命令,便可發佈包到私服倉庫中。

經過以上配置和操做,就能夠完成包的發佈過程。

最後

若是你的團隊內部用了本身的私服倉庫,那基本上都是用的這種方式。若是使用過程當中出現什麼問題,能夠懷疑是私服是否是壞了。好比咱們團隊中以前用的 Maven 私服就掛過。


壯士且慢,先給點個贊吧,老是被白嫖,身體吃不消!

我是風箏,公衆號「古時的風箏」。一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!你可選擇如今就關注我,或者看看歷史文章再關注也不遲。

公衆號名片-田園碼農.jpg

相關文章
相關標籤/搜索