Nexus3搭建本地仓库
一、安裝Nexus3
1、docker-compose.yaml 配置
注:8081端口是開放給后臺使用的,5000和5001端口是開放給倉庫使用的,換成別的也可以,只要配置docker倉庫時填寫開放的端口就可以了,我沒有單獨 映射,都用的8081
version: "3.0" services:nexus:image: sonatype/nexus3:3.38.1container_name: nexus3ports:- 8081:8081- 5000:5000- 5001:5001environment:NEXUS_CONTEXT: nexus3volumes:- ./data:/nexus-dataenvironment:ES_JAVA_OPTS: "-Xmx1024m -Xms1024m"2、啟動nexus
使用 docker-compose up -d 啟動啟動,后訪問 http://192.168.40.147:8081/
登錄用戶名admin密碼通過 cat data/admin.password 查看
登錄后可修改密碼為好記的密碼
3、安裝可能遇到問題
問題:
啟動后通過docker ps -a查看nexus3的狀態為退出,在docker-compose.yaml同級目錄下可查看其啟動的日志,通過 docker-compose logs -f 命令查看,發現沒有權限訪問宿主機創建文件目錄
解決方法:
可手動創建 mkdir data/instances 創建完后再查看狀態為啟動了
如果還未解決:授權 chmod 777 data/
二、配置docker倉庫
1、概述
默認倉庫說明
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中使用
Nexus倉庫類型介紹
Nexus3 提供了的3種類型的Docker倉庫,前兩者都可以創建多個倉庫,最后一個則可以將他們全部聚合到一個URL來訪問。
hosted:本地倉庫,通常我們會部署自己的構件到這一類型的倉庫。比如公司的第二方庫。
proxy:代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
group:倉庫組,用來合并多個hosted/proxy倉庫,當你的項目希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。
2、創建Blob Stores
填寫name,路徑會自動生成,你也可以自己修改掛載地址
blob stores有兩個,一個是系統默認的,一個是剛創建的。如果不想自己創建,使用系統默認的文件存儲目錄也是可以的。到時候創建repository時,存儲目錄選擇default就可以了。新創建的目錄,可以在/data/blobs/目錄下面可以看到。
3、配置倉庫
1)配置hosted類型的
hosted類型倉庫用作我們的私有倉庫。注意紅框中的配置,填寫完畢,點擊創建倉庫
上圖的Hosted設置選項,選項中有三個值:
Allow redeploy:允許同一個版本號下重復提交代碼, nexus以時間區分
Disable redeploy:不允許同一個版本號下重復提交代碼
Read-Only:不允許提交任何版本
原生的maven-releases庫是Disable redeploy設置, maven-snapshots是Allow redeploy。
2)配置proxy類型的
proxy類型倉庫,可以幫助我們訪問不能直接到達的網絡,如另一個私有倉庫,或者國外的公共倉庫
這里推薦幾個遠程倉庫:
jboss的maven中央倉庫地址:http://repository.jboss.com/maven2/
阿里云的maven中央倉庫地址:http://maven.aliyun.com/nexus/content/groups/public/
apache的maven中央倉庫地址:http://repo.maven.apache.org/maven2/
3)配置group類型的
必須將hosted repositories【托管資源庫】的順序放在proxy repositories【代理資源庫】之前,因為一個group【組資源庫】中可以涵括這些托管資源庫和代理資源庫。而一整個的group是作為一個public,一個接口給別人使用的。所以當查找架包的時候,如果代理資源庫在前面,那就是先從遠程去查找jar,而不是先從托管資源庫(本地倉庫)去查找是否有jar。這樣訪問外網的消耗比起來在本地查找,當然是將托管資源庫放在代理資源庫之前的優先位置了。
4、Maven配置
apache-maven-3.6.3下的setting.xml文件和項目中的pom.xml文件的關系是:settting.xml文件是全局設置,而pom.xml文件是局部設置。pom.xml文件對于項目來說,是優先使用的。而pom.xml文件中如果沒有配置鏡像地址的話,就按照settting.xml中定義的地址去查找。
如上圖方式獲取組倉庫smart_group的倉庫地址,修改setting.xml文件如下:
修改后可以重新編譯項目,必須添加參數-U,(-U,–update-snapshots,強制更新releases、snapshots類型的插件或依賴庫,否則maven一天只會更新一次snapshot依賴)。代理倉庫會從遠程中央倉庫下載jar包。
mvn clean compile -U5、管理平臺上傳三方jar包
有些jar是第三方提供的,在中央倉庫中是沒有的,我們可以上傳這些本地三方jar包到hosted repository宿主倉庫中。
上傳成功后,就可以看到hosted repository和group repository中已經有了剛上傳的三方jar包
6、命令上傳三方jar包
在setting.xml配置文件中添加hosted repository server
<!--id自定義,但是在使用命令上傳的時候會用到--> <server> <id>custom_hosted</id> <username>admin</username> <password>admin123</password> </server>使用如下命令上傳jar包:
mvn deploy:deploy-file -DgroupId=com.sinoeyes -DartifactId=hspharm-paas-enum -Dversion=1.0.0-dev2.0-SNAPSHOT -Dpackaging=jar -DpomFile="E:\hspharm\work\hspharm-paas-enum-1.0.0-dev2.0-SNAPSHOT.pom" -Dfile="E:\hspharm\work\hspharm-paas-enum-1.0.0-dev2.0-SNAPSHOT.jar" -Durl=http://192.168.180.47:8081/repository/hspharm-host/ -DrepositoryId=hspharm-host命令解釋:
-DgroupId=byd.ghy 自定義
-DartifactId=portal-auth 自定義
-Dversion=1.0.0 自定義,三個自定義,構成pom.xml文件中的標識
-Dpackaging=jar 傳的類型是jar類型
-Dfile=D:\auth-server.jar jar包的本地磁盤位置
-Durl=http://ip:8081/repository/custom_hosted/ hosted資源庫的地址
-DrepositoryId=custom_hosted 需要和setting.xml文件中配置的ID一致
上傳成功后,hosted repository中已經可以看到了
7、deploy部署jar包到私服
release和snapshots jar包區別
SNAPSHOT版本代表不穩定(快照版本),還在處于開發階段,隨時都會有變化。
當上傳同樣的版本號jar包的時候,SNAPSHOT會在版本號的后面自動追加一串新的數字,即日志標簽,
nexus會根據日志標簽區分出不同的版本,在maven引用時,如果使用的是snapshot版本,
重新導入maven的時候,會去私庫拉取最新上傳的代碼。
RELEASE則代表穩定的版本(發布版本),一般上線后都會改用RELEASE版本。
也就是說1.0,2.0這樣的版本只能有一個,也就是說當前版本號下,不可能出現不同的jar。
創建snapshot倉庫
可以在nexus上添加一個snapshot倉庫,專門用于存放snapshot版本的jar包。snapshot倉庫也是hosted類型的,創建方式和hosted repository類型。創建好后,加入到組倉庫里面就可以了。
一定要選擇Deployment Policy為allow redeploy
同樣的操作,創建Release類型的倉庫,并加入到組中
8、項目pom.xml文件配置
可以在項目的pom文件中設置具體的relaeses庫和snapshots庫。如果當前項目的版本號的后綴名中帶著-SNAPSHOT,類似***-SNAPSHOT,就會將項目jar包提交到snapshots庫中,沒有帶-SNAPSHOT的話會提交releases庫中。
在pom.xml文件中配置 distributionManagement 節點如下,在項目中執行deploy命令后,jar包將會被上傳到nexus中。
setting.xml中配置
<server> <id>custom_snapshots</id> <username>admin</username> <password>admin123</password> </server> <server> <id>custom_releases</id> <username>admin</username> <password>admin123</password> </server>pom.xml配置
<repositories><repository><id>custom_group</id><name>Nexus Repository</name><url>http://192.168.124.189:8081/repository/custom_group/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></repository></repositories><pluginRepositories><pluginRepository><id>custom_group</id><name>Nexus Plugin Repository</name><url>http://192.168.124.189:8081/repository/custom_group/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></pluginRepository></pluginRepositories> <!--項目分發信息,在執行mvn deploy后表示要發布的位置。有了這些信息就可以把網站部署到遠程服務器或者把構件jar等部署到遠程倉庫。 --><distributionManagement><repository><!--部署項目產生的構件到遠程倉庫需要的信息 --><id>custom_releases</id><!-- 此處id和settings.xml的id保持一致 --><name>Nexus Release Repository</name><url>http://192.168.124.189:8081/repository/custom_releases/</url></repository><snapshotRepository><!--構件的快照部署到哪里?如果沒有配置該元素,默認部署到repository元素配置的倉庫,參見distributionManagement/repository元素 --><id>custom_snapshots</id><!-- 此處id和settings.xml的id保持一致 --><name>Nexus Snapshot Repository</name><url>http://192.168.124.189:8081/repository/custom_snapshots/</url></snapshotRepository></distributionManagement>默認地,maven編譯打包不會下載SNAPSHOT版本的jar包,所以還需要在pom.xml文件中配置支持下載snapshot版本jar包。
mvn clean deploy -Dmaven.test.skip=true總結
以上是生活随笔為你收集整理的Nexus3搭建本地仓库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nexus3 测试操作
- 下一篇: UKEY开发 用户登录流程