1. 程式人生 > >Maven私服Nexus詳解

Maven私服Nexus詳解

      maven的倉庫只有兩大類:1.本地倉庫 2.遠端倉庫,在遠端倉庫中又分成了3種:2.1 中央倉庫 2.2 私服 2.3 其它公共庫。

   私服是一種特殊的遠端倉庫,它是架設在區域網內的倉庫服務,私服代理廣域網上的遠端倉庫,供區域網內的Maven使用者使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠端倉庫下載,快取在私服上之後,再為Maven的下載請求提供服務。我們還可以把一些無法從外部倉庫下載到的構件上傳到私服上。

Maven私服的 個特性:

1.節省自己的外網頻寬:減少重複請求造成的外網頻寬消耗

2.加速Maven構件:如果專案配置了很多外部遠端倉庫的時候,構建速度就會大大降低

3.部署第三方構件:有些構件無法從外部倉庫獲得的時候,我們可以把這些構件部署到內部倉庫(私服)中,供內部maven專案使用

4.提高穩定性,增強控制:Internet不穩定的時候,maven構建也會變的不穩定,一些私服軟體還提供了其他的功能

5.降低中央倉庫的負荷:maven中央倉庫被請求的數量是巨大的,配置私服也可以大大降低中央倉庫的壓力

因此我們在實際的專案中通常使用私服來間接訪問中央倉庫,專案通常不直接訪問中央倉庫

  在私服中我們一nexus為主,下載地址是下載之後解壓縮,將nexus-2.11.1-01-bundle\nexus-2.11.1-01\bin的路徑加入到我們的環境變數中去,通過cmd命令開啟docs視窗,輸入nexus命令,顯示如下:Usage: nexus { console : start : stop : restart : install : uninstall }


請按任意鍵繼續. . . 則表示配置成功,在我們使用之前首先需要通過nexus install命令安裝私服,然後通過nexus start啟動私服,nexus私服有自己內建的伺服器,預設的訪問埠號是8081,我們可以通過http://localhost:8081/nexus/地址訪問私服,點選右上角的log in輸入admin/admin123登陸私服,點選Views/Repositories下的


我們看到倉庫的型別主要有proxy、hosted、group型別,其中proxy是代理的遠端倉庫,hosted是指本地或者內部專案倉庫,group只是一個倉庫組,它包含其他的幾個倉庫,Releases是指發行版本(本地或者內部專案

),Snapshots是指正在構建的版本(本地或者內部專案),Central是指中央倉庫(遠端中央倉庫下載的構件放入此處)。

我們可以再專案的pom.xml檔案中配置:

  <repositories>
     <repository>
        <id>nexus</id>
        <name>nexus-repo</name>
        <url>http://localhost:8081/nexus/content/repositories/central/</url>
     </repository>
  </repositories>

這樣我們的專案就可以從私服的中央倉庫中下載構件,但是如果我們需要用到releases或者snapshots倉庫,就需要增加額外的配置,此時就需要用到我們的group倉庫,我們先檢視一下group倉庫

   

group倉庫預設包含四個倉庫,因此我們只需要配置group倉庫就可以將其他幾個倉庫都配置上去

   <repositories>
     <repository>
        <id>nexus</id>
        <name>nexus-repo</name>
        <url>http://localhost:8081/nexus/content/groups/public/</url>
     </repository>
  </repositories>

在專案的pom.xml檔案配置,只能對當前的專案起作用,因此它是一個區域性的配置,我們可以再maven的settings.xml 中配置,那麼它就起到一個全域性的作用,在profiles節點下配置:

     <profile>
      <id>nexusProfile</id>
        <repositories>
<repository>
<id>nexus</id>
<name>nexus-repo</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</repository>
       </repositories>
    </profile>

此時的profile並未啟用,我們還需要配置:

    <activeProfiles>
    <activeProfile>nexusProfile</activeProfile>  //其值指向profile的id
  </activeProfiles> 

在我們的配置檔案中可能有很多個profile,每一個profile只有啟用之後才生效。

這個時候當我們在我們的專案中加入依賴,專案通過我們的私服去訪問遠端中央倉庫,將下載到的構件放入到我們的私服中,但是當我們通過nexus stop 命令關閉私服時,我們再次在專案中加入依賴我們會發現,專案會先訪問私服,但是發現私服關閉了,就會從遠端中央倉庫去下載我們需要的構件,這樣的情況並不是我們想要的 ,因為我們希望通過私服去間接的訪問遠端中央倉庫,那麼這個時候的解決辦法就是配置映象,每一個倉庫都有一個唯一的id,遠端中央倉庫的id是central,上面配置的倉庫的id為nexus,當我們的專案要訪問central或nexus倉庫時,我們讓它映象到其他的倉庫上,不管你訪問哪一個倉庫,但是隻能訪問指定的映象倉庫,我們可以再settings.xml中的mirrors節點下配置:

       <mirror>
      <id>nexusId</id>
      <mirrorOf>central,nexus</mirrorOf>  //在這裡我們通常使用*代替central,nexus,表示任何的訪問都會映象到這裡
      <name>Human Readable Name for this Mirror.</name>
      <url>http://localhost:8081/nexus/content/groups/public/</url>
    </mirror>

那麼這樣就實現了,只能通過私服去訪問遠端中央倉庫。