轉自:https://blog.csdn.net/ThinkWon/article/details/94346681
隨時隨地閱讀更多技術實戰乾貨,獲取項目源碼、學習資料,請關注源代碼社區公衆號(ydmsq666)、加博主微信(guyun297890152)可以進入微信技術交流羣、QQ技術交流羣(183198395)。
Nexus介紹
Nexus是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫服務器,在代理遠程倉庫的同時維護本地倉庫,以節省帶寬和時間,Nexus就可以滿足這樣的需要。此外,他還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。這些優點使其日趨成爲最流行的Maven倉庫管理器。除此之外,Nexus還可以管理Docker鏡像。
注:Maven簡介可參考Maven簡介
私服的好處
沒有私服時:本地倉庫沒有,則去中央倉庫下載
搭建私服後:本地倉庫沒有,再去私服下載,私服沒有,再去中央倉庫下載
- 減少網絡帶寬流量
- 加速Maven構建
- 部署第三方構件
- 提高穩定性、增強控制
- 降低中央倉庫的負載
使用Docker安裝Nexus私服
注意:請先自行安裝Docker
查找Nexus3鏡像
docker search nexus3
拉取Nexus3鏡像
docker pull sonatype/nexus3
注:最新版本的Nexus3.18在下載依賴時有點問題,建議安裝3.17版本的Nexus
具體報錯是這樣的:Caused by: org.apache.maven.wagon.authorization.AuthorizationException: Not authorized
查看鏡像
docker images
運行Nexus容器
#進入/opt目錄,創建宿主機掛載目錄並設置權限
cd /opt
mkdir nexus-data
chown -R 200 nexus-data
#運行nuxus私服
# -d:後臺運行
# -p:將容器內部端口向外映射,第一個參數是宿主機端口,第二個參數容器端口
# --name:命名容器名稱
# --restart always在容器退出時總是重啓容器
# -v:將容器內配置、日誌、數據文件等文件夾掛載到宿主機指定目錄
docker run -d --name nexus3 -p 8081:8081 --restart always -v /opt/nexus-data:/nexus-data sonatype/nexus3
如果沒有設置權限,運行nexus時就會報如下錯誤
Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning: Forcing option -XX:LogFile=/tmp/jvm.log
Unable to update instance pid: Unable to create directory /nexus-data/instances
/nexus-data/log/karaf.log (No such file or directory)
Unable to update instance pid: Unable to create directory /nexus-data/instances
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory
登錄Nexus
訪問web地址:http://ip:8081
從3.17版本開始默認密碼不再是admin123,密碼是隨機生成。首次登錄頁面會顯示admin用戶的密碼在/nexus-data/admin.password
注意:我們剛纔安裝的時候把/nexus-data目錄掛載到宿主機的/opt/nexus-data,所以密碼在/opt/nexus-data/admin.password
執行命令vim /opt/nexus-data/admin.password,即可查看到如9c3ac7fb-4264-4457-8e48-4aa84c71e7ad這樣的密碼,然後登錄即可。用戶名:admin,密碼:/opt/nexus-data/admin.password裏面的密碼
登錄後會讓用戶設置新的密碼。這裏把用戶名和密碼設置爲admin/admin123
登錄後界面如下
默認倉庫說明
maven-central:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar
maven-releases:私庫發行版jar,初次安裝請將Deployment policy設置爲Allow redeploy
maven-snapshots:私庫快照(調試版本)jar
maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml或項目pom.xml中使用
倉庫類型
Group:這是一個倉庫聚合的概念,用戶倉庫地址選擇Group的地址,即可訪問Group中配置的,用於方便開發人員自己設定的倉庫。maven-public就是一個Group類型的倉庫,內部設置了多個倉庫,訪問順序取決於配置順序,3.x默認Releases,Snapshots,Central,當然你也可以自己設置。
Hosted:私有倉庫,內部項目的發佈倉庫,專門用來存儲我們自己生成的jar文件
3rd party:未發佈到公網的第三方jar (3.x去除了)
Snapshots:本地項目的快照倉庫
Releases: 本地項目發佈的正式版本
Proxy:代理類型,從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage屬性的值即被代理的遠程倉庫的路徑),如可配置阿里雲maven倉庫
Central:中央倉庫
Apache Snapshots:Apache專用快照倉庫(3.x去除了)
配置阿里雲公共倉庫
Nexus的maven-group的默認查找方式爲:maven-releases --> maven-snapshots --> maven-central,我們在中間再加一個阿里雲倉庫,加快訪問速度。
選擇proxy類型
信息填寫如下
倉庫名字:maven-aliyun
阿里雲遠程maven倉庫地址:http://maven.aliyun.com/nexus/content/groups/public/
其他選項:默認即可
修改maven-public中的倉庫引用及順序:
至此,配置完畢!我們在maven使用maven-public倉庫地址的時候,會按照如下順序訪問:本地倉庫 --> 私服maven-releases --> 私服maven-snapshots --> 遠程阿里雲maven倉庫 --> 遠程中央倉庫。
Maven配置使用Nexus私服
Maven配置私服下載依賴方式
maven配置私服下載有兩種方式
-
setting.xml:該文件配置的是全局模式
-
pom.xml:該文件的配置的是項目獨享模式
若pom.xml和setting.xml同時配置了,以pom.xml爲準
setting.xml文件配置
這個時候不需要再配置pom.xml文件,即可使用私服下載jar依賴包
<mirrors>
<mirror>
<!--該鏡像的唯一標識符。id用來區分不同的mirror元素。 -->
<id>nexus-releases</id>
<!--*指的是訪問任何倉庫都使用我們的私服-->
<mirrorOf>*</mirrorOf>
<!--該鏡像的URL。構建系統會優先考慮使用該URL,而非使用默認的服務器URL。 -->
<url>http://10.172.0.201:8081/repository/maven-public/</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://10.172.0.201:8081/repository/maven-snapshots/</url>
</mirror>
</mirrors>
鏡像的URL可以從頁面中的copy按鈕直接複製
配置從私服下載jar包
<profiles>
<profile>
<!--profile的id-->
<id>nexus</id>
<repositories>
<repository>
<!--倉庫id,repositories可以配置多個倉庫,保證id不重複-->
<id>nexus-releases</id>
<!--倉庫地址,即nexus倉庫組的地址-->
<url>http://nexus-releases</url>
<releases>
<!--是否下載releases構件-->
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件倉庫,maven的運行依賴插件,也需要從私服下載插件 -->
<pluginRepository>
<!-- 插件倉庫的id不允許重複,如果重複後邊配置會覆蓋前邊 -->
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!--激活profile-->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
pom.xml文件配置
如果你配置了pom.xml,則以pom.xml爲準
<repositories>
<repository>
<id>maven-nexus</id>
<name>maven-nexus</name>
<url>http://10.172.0.201:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
配置Maven連接私服打包上傳項目
第一步,修改setting.xml文件,指定releases和snapshots server的用戶名和密碼
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
第二步,在項目的pom.xml文件中加入distributionManagement節點
注意:repository裏的id需要和第一步裏的server id名稱保持一致
<distributionManagement>
<repository>
<id>releases</id>
<name>Releases</name>
<url>http://10.172.0.201:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshot</name>
<url>http://10.172.0.201:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
第三步,執行發佈
mvn deploy
登錄Nexus,查看對應的倉庫已經有相關的依賴包了。
注意以下幾點:
- 若項目版本號末尾帶有 -SNAPSHOT,則會發布到snapshots快照版本倉庫
- 若項目版本號末尾帶有 -RELEASES 或什麼都不帶,則會發布到releases正式版本倉庫
上傳第三方jar包