Nexus 是一个强大的仓库管理器,它支持多种类型的仓库,包括 Maven、NuGet、PyPI、R、Docker 等。以下是基于Docker搭建 Nexus 3.x 版本的 Maven 制品库搭建步骤:
一.下载镜像
镜像地址及tag查询:https://hub.docker.com/r/sonatype/nexus3/tags(需要魔法)
以下载tag为latest的镜像为例:docker pull sonatype/nexus3:3.66.0
二.创建并运行nexus容器
1.创建容器
新建docker volume:docker volume create nexus-data
启动并运行容器:docker run -d --restart=always -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3:3.66.0
观察容器日志,见到如下日志后nexus即启动成功
如机器内存不足,可调整容器参数
-e INSTALL4J_ADD_VM_PARAMS="-Xms512m -Xmx512m -XX:MaxDirectMemorySize=128m -Djava.util.prefs.userRoot=/nexus-data/javaprefs"
2.容器启动成功后,输入http://ip:8081,见到如下弹框:
admin密码在容器内/nexus-data/admin.password文件中
使用命令进入容器查看/nexus-data/admin.password文件,
docker exec -it /bin/bash nexus
cat /nexus-data/admin.password
3.输入用户名和密码登陆后,需要重新修改admin用户的密码
4.选择是否匿名访问,选择否
三、配置nexus
1.为了便于统一管理,可新建Blob Store
类型选择File,输入名称后Path会自动带出,点击保存,在后续新增repository时选择新建的blob store
2.nexus仓库
①nexus仓库有三种类型:proxy(代理仓库)、hosted(本地仓库)、group(组仓库)
proxy(代理仓库)用于代理远程的公共仓库,用户连接私服,私服自动去中央仓库下载依赖;
hosted(本地仓库)用于部署自己的jar到这个类型的仓库,包括releases和snapshot两部分;
group(组仓库)用于合并多个proxy、hosted仓库,组合对外提供服务;
②以maven仓库为例,新建仓库时指定仓库通用属性,如名称、版本策略(该仓库存储release包、snapshot包还是两种均可存储)、存储位置(选择存储区域,方便文件同一管理)
③对于不同类型的仓库,在新增时需要设置不同的参数
新建proxy代理仓库时,需指定远程存储url:
新建hosted本地仓库时,需指定部署策略:
部署策略主要分3种策略
Allow redeploy:允许同一个版本号重复推送, nexus会以时间进行区分
Disable redeploy:不允许同一个版本号下重复推送
Read-Only:不允许提交任何版本
新建group组仓库时,需指定成员仓库及成员仓库的顺序
四、配置maven
1.maven全局配置settting.xml
配置server与mirror,如果nexus没有开启匿名访问,则server中需要配置账号与密码,server与mirror的id需要一致,此时在idea中编译项目,在代理仓库中能看到已经从中央仓库中拉取了项目所需jar包依赖
<servers><server> <id>custom-proxy</id> <username>xxx</username> <password>xxx</password> </server> <server> <id>custom-hosted</id> <username>xxx</username> <password>xxx</password> </server><server> <id>custom-group</id> <username>xxx</username> <password>xxx</password> </server>
</servers><mirrors> <mirror> <id>custom-group</id> <name>custom-group</name> <url>http://ip:8081/repository/custom-group/</url> <mirrorOf>central</mirrorOf> </mirror>
</mirrors>
2.项目pom.xml文件配置
需注意repository的id属性需要与setting.xml中server中的id属性一致
<distributionManagement><repository><id>custom-hosted</id><name>Nexus Hosted Repository</name><url>http://ip:8081/repository/custom-hosted/</url></repository>
</distributionManagement>
此时在idea中deploy后,可看到hosted仓库中已有对应依赖jar包;在开发过程中,可将共用的依赖包上传至nexus私服,其他研发同学可直接依赖私服中的jar模块