我是風箏,公衆號「古時的風箏」,一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!
文章會收錄在 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
tar -zxvf nexus-version-unix.tar.gz
nexus-version/bin/
` 目錄,執行命令 ./nexus start
沒錯,就是這麼簡單。
一般狀況下,以上三步就能夠完成安裝,若是有問題,而且提示「 NOT RECOMMENDED TO RUN AS ROOT 」,能夠經過修改 /bin/nexus
文件,在其中加入 RUN_AS_USER=root
,而後從新啓動便可。
另外,若是是 docker 環境,能夠直接獲取 nexus 的鏡像完成安裝。例如我在 mac 上直接搜索了 nexus,而後下載並啓動便可。
當咱們經過地址,在瀏覽器上訪問 nexus 的首頁,是下圖這樣子的:
默認的帳號名是 admin
,密碼是 admin123
。管理員登陸後,能夠在設置頁面管理角色、用戶等其餘一系列的操做。例如建立一個角色,給角色設置某一倉庫的管理權限,而後向這個角色中添加人員。具體操做不作過多介紹,一看就明白。
管理員還能夠管理倉庫,不過通常來講,默認的那幾個倉庫就能夠了。默認有以下幾個倉庫:
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 的配置文件 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 文件中還會用到。
<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 依賴。不然在獲取依賴的時候會有問題。
經過以上配置和操做,就能夠完成包的發佈過程。
若是你的團隊內部用了本身的私服倉庫,那基本上都是用的這種方式。若是使用過程當中出現什麼問題,能夠懷疑是私服是否是壞了。好比咱們團隊中以前用的 Maven 私服就掛過。
壯士且慢,先給點個贊吧,老是被白嫖,身體吃不消!
我是風箏,公衆號「古時的風箏」。一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!你可選擇如今就關注我,或者看看歷史文章再關注也不遲。