目录
- 前言
- 一、Nexus是什么?
- 二、Docker安装方式
- 1. 拉取镜像
- 2. 创建挂载目录
- 3. 运行
- 4. 容器运行日志 (可选)
- 三、用户登录
- 四、仓库介绍
- 五、创建代理仓库
- 六、上传依赖(重点)
- 七、下载依赖
- 常见问题
- 1、如何把新建的仓库添加到组?
- 2、Nexus代理仓库状态是什么意思?
- 3、推送到Nexus提示405,是什么问题?
前言
搭建私有maven仓库适合在协同工作时,如:A项目是公司的工具包,B项目中会引入A install后形成的jar包,但是其他同事本地运行也要和你一样的操作吗?到线上运行也要一样的操作吗?所以,这类型产生的jar包需要一个统一的地方来进行管理,只需把A的jar包部署推送到私有maven仓库中,B项目在pom文件中引入依赖即可。
一、Nexus是什么?
官网:https://help.sonatype.com/repomanager3
Nexus是一款非常流行的仓库管理系统
,用于管理和分发各种软件包、依赖项、构建工件等。它是一个基于Java的开源软件,最初由Sonatype开发,并在Apache许可证下发布。在软件开发中,通常需要使用大量的代码库和第三方依赖项,这些依赖项可能来自不同的来源。Nexus可以帮助开发人员在一个统一的地方管理所有的依赖项
,使得项目开发的过程更加高效和规范化。
二、Docker安装方式
1. 拉取镜像
docker pull sonatype/nexus3:latest
2. 创建挂载目录
mkdir /data/nexus-data
chown -R 200 /data/nexus-data
3. 运行
docker run -d -p 8081:8081 --name nexus \
--restart=always \
-e INSTALL4J_ADD_VM_PARAMS="-Xms512m -Xmx512m \
-XX:MaxDirectMemorySize=1200m" \
-v /data/nexus-data:/nexus-data sonatype/nexus3
4. 容器运行日志 (可选)
# -f 实时追加最新日志
# --tail=N 查看日志的最后 N 行
docker logs -f --tail=100 nexus
启动成功后,浏览器ip+端口访问即进入主页面:
三、用户登录
nexus3的账号是:admin
密码要去挂载的目录查看一个叫admin.password的文件,里面放的就是admin的登录密码。
cd /data/nexus-data
查看密码
cat admin.password
登进去了,根据提示改改密码就可以正常使用了。
四、仓库介绍
nexus仓库分三种类型:
- proxy 代理仓库,比如代理到maven中央仓库。
- hosted 宿主仓库,即自己的私人仓库。
- group 仓库组,由多个仓库组成,当要下载依赖时会
遍历
每个仓库去找。
其中,hosted 宿主仓库又分为:releases 和shapshots,分别表示依赖的版本的发行版、快照版。快照版依赖不能上传到发行版仓库,反之亦然。nexus做了限制。
仓库格式有两种:
- maven2(关注)
- nuget
默认的group仓库组把central、releases 和shapshots这三个仓库都放进去了
五、创建代理仓库
https://maven.aliyun.com/nexus/content/groups/public
六、上传依赖(重点)
1、先配置本地maven的setting.xml
<servers>
<!-- 这是配置访问私有仓库的用户名密码 -->
<server>
<!-- id标签可以随便填,唯一即可 -->
<id>opals-maven</id>
<username>dev</username>
<password>dev</password>
</server>
</servers>
2、在需要上传的模块pom.xml配置中添加
<distributionManagement>
<repository>
<id>opals-maven</id>
<url>http://ip:port/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>opals-maven</id>
<url>http://ip:port/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
repository 标签是代表上传release版本
snapshotRepository 标签代表上传snapshot版本
- nexus会根据该模块的版本进行自动选择,如果你的版本号带有SNAPSHOT如:
<version>1.0.0-SNAPSHOT</version>
,那么会上传到SNAPSHOT仓库,release同理,如果版本号不存在这两个单词,如<version>1.0.0</version>
,那么会选择release仓库上传。 id
,就是上面配置的server id,nexus会通过这个id去server中拿用户名密码去访问私服仓库。url
,就是对应仓库的地址:仓库的url复制即可,注意对应仓库
注意
设置为Allow redeploy代表允许我们对仓库中的依赖维护升级新版本,如果设置为disable redeploy意味着我们无法将升级版本上传。
七、下载依赖
1、配置本地maven,打开setting.xml,找到mirrors标签。
然后添加一个mirror标签:
<mirrors>
<mirror>
<id>opals-maven</id>
<mirrorOf>*</mirrorOf>
<url>`仓库组`的url/</url>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
常见问题
1、如何把新建的仓库添加到组?
2、Nexus代理仓库状态是什么意思?
online-remote available
表示该被代理仓库可用
online-ready to connect
表示还没有一个依赖去访问这个被代理仓库,nexus不知道这个被代理仓库能不能用,所以它只能展示为待连接状态:
3、推送到Nexus提示405,是什么问题?
Return code is: 405, ReasonPhrase: PUT.
检查pom文件中的<id></id><url></url>
配置是否正确,确保是部署到hosted
而不是group