Maven 私服 Nexus3 [ 福利:當(dāng)當(dāng)優(yōu)惠碼 ]

優(yōu)惠碼:PX3RVM 300減60 Z4JUCB 200減30
1、Maven和Nexus3 簡(jiǎn)介
Maven是一個(gè)采用純Java編寫(xiě)的開(kāi)源項(xiàng)目管理工具
采用一種被稱(chēng)之為Project Object Model(POM)概念來(lái)管理項(xiàng)目,所有的項(xiàng)目配置信息都被定義在一個(gè)叫做POM.xml的文件中, 通過(guò)該文件Maven可以管理項(xiàng)目的整個(gè)生命周期,包括清除、編譯,測(cè)試,報(bào)告、打包、部署等等。
目前Apache下絕大多數(shù)項(xiàng)目都已經(jīng)采用Maven進(jìn)行管理. 而Maven本身還支持多種插件, 可以方便更靈活的控制項(xiàng)目, 開(kāi)發(fā)人員的主要任務(wù)應(yīng)該是關(guān)注商業(yè)邏輯并去實(shí)現(xiàn)它, 而不是把時(shí)間浪費(fèi)在學(xué)習(xí)如何在不同的環(huán)境中去依賴(lài)jar包,項(xiàng)目部署等。
Maven和ant都是軟件構(gòu)建工具(軟件管理工具),Maven比Ant更加強(qiáng)大,已經(jīng)取代了ant,jar包的聲明式依賴(lài)描述。Maven有jar包的倉(cāng)庫(kù)。
私服是架設(shè)在局域網(wǎng)的一種特殊的遠(yuǎn)程倉(cāng)庫(kù),目的是代理遠(yuǎn)程倉(cāng)庫(kù)及部署第三方構(gòu)件。有了私服之后,當(dāng) Maven 需要下載構(gòu)件時(shí),直接請(qǐng)求私服,私服上存在則下載到本地倉(cāng)庫(kù);否則,私服請(qǐng)求外部的遠(yuǎn)程倉(cāng)庫(kù),將構(gòu)件下載到私服,再提供給本地倉(cāng)庫(kù)下載。

公司如果沒(méi)有maven私服,則需要用手動(dòng)打jar包的方式添加依賴(lài)
2、安裝 Maven
1、下載 maven
[[email protected] ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz2、解壓安裝
[[email protected] ~]# tar xf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] ~]# ln -s apache-maven-3.5.4/ maven3、安裝 java 環(huán)境
[[email protected] ~]# tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] ~]# ln -s jdk1.8.0_201/ java4、添加環(huán)境變量
[[email protected] ~]# vim /etc/profile添加如下內(nèi)容(這里的MAVEN_HOME需要改為你自己的maven解壓目錄):
JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/maven
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH重載環(huán)境變量
[[email protected] ~]# source /etc/profile5、驗(yàn)證 maven 安裝
輸入命令 mvn -version 看到如下內(nèi)容說(shuō)明安裝成功了。

3、安裝 nexus3
1、下載
專(zhuān)業(yè)版的nexus收費(fèi),下載開(kāi)源版 Nexus OSS,下載地址為 https://www.sonatype.com/download-oss-sonatype

Wing下載的時(shí)候可以獲取鏈接用迅雷下載,我是直接把https改成了http下載,下載下來(lái)的包大小不一樣,我暫時(shí)使用的是小一點(diǎn)的120多M的安裝包
2、解壓
[[email protected] ~]# cd /usr/local
[[email protected] ~]# tar -zxf nexus-3.13.0-01-unix.tar.gz解壓后會(huì)多出兩個(gè)目錄,nexus-3.13.0-01和sonatype-work。
3、啟動(dòng)
[[email protected] ~]# cd nexus-3.13.0-01/bin/
[[email protected] ~]# ./nexus start
看到如圖所示內(nèi)容表明我們已經(jīng)啟動(dòng)成功了,游覽器輸入http://localhost:8081即可訪(fǎng)問(wèn)。
注意:
啟動(dòng)后如果你立即訪(fǎng)問(wèn)可能發(fā)現(xiàn)什么都沒(méi)有,不要急這個(gè)啟動(dòng)需要一定時(shí)間,1分鐘后再?lài)L試訪(fǎng)問(wèn)

登錄 :
點(diǎn)擊右上角的sign in登錄,輸入賬戶(hù)admin
密碼:
# cat /root/sonatype-work/nexus3/admin.password
91c37108-809a-495b-942d-3932b9b33e044、倉(cāng)庫(kù)介紹
點(diǎn)擊“設(shè)置-Repositories”,就可以看到倉(cāng)庫(kù),分三種類(lèi)型:

proxy:是遠(yuǎn)程倉(cāng)庫(kù)的代理。比如說(shuō)在nexus中配置了一個(gè)central repository的proxy,當(dāng)用戶(hù)向這個(gè)proxy請(qǐng)求一個(gè)artifact,這個(gè)proxy就會(huì)先在本地查找,如果找不到的話(huà),就會(huì)從遠(yuǎn)程倉(cāng)庫(kù)下載,然后返回給用戶(hù),相當(dāng)于起到一個(gè)中轉(zhuǎn)的作用。
Hosted:是宿主倉(cāng)庫(kù),用戶(hù)可以把自己的一些構(gòu)件,deploy到hosted中,也可以手工上傳構(gòu)件到hosted里。比如說(shuō)oracle的驅(qū)動(dòng)程序,ojdbc6.jar,在central repository是獲取不到的,就需要手工上傳到hosted里,一般用來(lái)存放公司自己的jar包;
Group:是倉(cāng)庫(kù)組,在maven里沒(méi)有這個(gè)概念,是nexus特有的。目的是將上述多個(gè)倉(cāng)庫(kù)聚合,對(duì)用戶(hù)暴露統(tǒng)一的地址,這樣用戶(hù)就不需要在pom中配置多個(gè)地址,只要統(tǒng)一配置group的地址就可以了右邊那個(gè)Repository Path可以點(diǎn)擊進(jìn)去,看到倉(cāng)庫(kù)中artifact列表。不過(guò)要注意瀏覽器緩存,當(dāng)你的項(xiàng)目希望在多個(gè)repository使用資源時(shí)就不需要多次引用了,只需要引用一個(gè)group即可。
maven-public:maven-central、maven-release和maven-snapshot三個(gè)庫(kù)的合集。
maven-release:用來(lái)存放release版本的jar包。
maven-snapshot:用來(lái)存放snapshot版本的jar包。
關(guān)于Maven的Snapshot版本與Release版本
Snapshot版本代表不穩(wěn)定、尚處于開(kāi)發(fā)中的版本
Release版本則代表穩(wěn)定的版本
什么情況下該用SNAPSHOT? 協(xié)同開(kāi)發(fā)時(shí),如果A依賴(lài)構(gòu)件B,由于B會(huì)更新,B應(yīng)該使用SNAPSHOT來(lái)標(biāo)識(shí)自己。這種做法的必要性可以反證如下:
a.如果B不用SNAPSHOT,而是每次更新后都使用一個(gè)穩(wěn)定的版本,那版本號(hào)就會(huì)升得太快,每天一升e68a84e8a2ade79fa5e9819331333363396362甚至每個(gè)小時(shí)一升,這就是對(duì)版本號(hào)的濫用。
b.如果B不用SNAPSHOT, 但一直使用一個(gè)單一的Release版本號(hào),那當(dāng)B更新后,A可能并不會(huì)接受到更新。因?yàn)锳所使用的repository一般不會(huì)頻繁更新release版本的緩存(即本地repository),所以B以不換版本號(hào)的方式更新后,A在拿B時(shí)發(fā)現(xiàn)本地已有這個(gè)版本,就不會(huì)去遠(yuǎn)程Repository下載最新的B
不用Release版本,在所有地方都用SNAPSHOT版本行不行?不行。正式環(huán)境中不得使用snapshot版本的庫(kù)。 比如說(shuō),今天你依賴(lài)某個(gè)snapshot版本的第三方庫(kù)成功構(gòu)建了自己的應(yīng)用,明天再構(gòu)建時(shí)可能就會(huì)失敗,因?yàn)榻裢淼谌娇赡芤呀?jīng)更新了它的snapshot庫(kù)。你再次構(gòu)建時(shí),Maven會(huì)去遠(yuǎn)程repository下載snapshot的最新版本,你構(gòu)建時(shí)用的庫(kù)就是新的jar文件了,這時(shí)正確性就很難保證了。
5、向 nexus3 私服上傳 jar 包
1、準(zhǔn)備環(huán)境
1、創(chuàng)建3rd_part庫(kù)
使用默認(rèn)用戶(hù) admin/admin123 登陸

點(diǎn)擊左側(cè)的repository\repositories后,在右側(cè)點(diǎn)擊create repository

然后選擇maven2(hosted),填寫(xiě)如下

跳到首頁(yè)后選擇maven-public

將3rd_part移到member中,即將3rd_part由maven-public管理,點(diǎn)擊save


至此,創(chuàng)建倉(cāng)庫(kù)完成
2、創(chuàng)建 3rd_part 管理用戶(hù)
創(chuàng)建用戶(hù): 用戶(hù)名/密碼-dev/dev123

2、直接瀏覽器
使用dev/dev123登陸,點(diǎn)擊upload

填寫(xiě)上傳jar包的信息后,點(diǎn)擊upload

可以看到已經(jīng)上傳成功

4、常見(jiàn)錯(cuò)誤
問(wèn)題1:上傳報(bào)錯(cuò)誤碼405,F(xiàn)ailed to transfer file。
解決:仔細(xì)查看報(bào)錯(cuò)信息就會(huì)發(fā)現(xiàn),是上傳的url錯(cuò)了,原因就是repository的地址寫(xiě)錯(cuò)了。
問(wèn)題2:錯(cuò)誤碼401或者403
解決:其實(shí)403錯(cuò)誤就是“禁止訪(fǎng)問(wèn)”的含義,所以問(wèn)題的根源肯定在授權(quán)上面。Maven在默認(rèn)情況下會(huì)使用deployment帳號(hào)(默認(rèn)密碼deploy)登錄的系統(tǒng),但是關(guān)鍵的Nexus中Releases倉(cāng)庫(kù)默認(rèn)的Deployment Policy是“Disable Redeploy”,所以無(wú)法部署的問(wèn)題在這個(gè)地方,方法是將其修改為“Allow Redeploy”就可以了。401就是Maven settings.xml沒(méi)有設(shè)置密碼

喜歡,在看
