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是指發行版本(本地或者內部專案
我們可以再專案的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>
那麼這樣就實現了,只能通過私服去訪問遠端中央倉庫。