搭建极速稳定的 Maven 私有仓库
在团队开发中,依赖下载慢、第三方包不稳定、内部组件共享难是常见痛点。搭建一个私有的 Maven 仓库(Nexus Repository Manager)是解决这些问题的最佳方案。本文将基于 Docker 部署 Nexus 3,并针对 低内存环境 和 大文件传输超时 问题进行深度优化,同时配置 阿里云镜像加速,打造极速、稳定的内网/外网通用仓库。
一、环境准备
- 创建目录并赋予正确权限
# 1. 创建数据持久化目录
sudo mkdir -p /opt/nexus-data/nexus-data
# 2. 修正所有者权限 (UID 200 是 Nexus 内部用户)。如果不执行这一步,容器将因无法写入日志和数据而崩溃
sudo chown -R 200:200 /opt/nexus-data
# 3. 进入工作目录
cd /opt/nexus-data
- 编写 Docker Compose 文件docker-compose.yml
version: '3.8'
services:
nexus:
image: sonatype/nexus3:latest
container_name: nexus-repo
restart: always
ports:
- "8081:8081" # Web 界面端口
volumes:
- ./nexus-data:/nexus-data # 数据持久化
environment:
# 4G 内存机器建议:堆内存 1GB,直接内存 512MB
- INSTALL4J_ADD_VM_PARAMS=-Xms512m -Xmx1024m -XX:MaxDirectMemorySize=512m
# 将 HTTP 空闲超时从默认 30s 延长至 300s (5分钟),防止大文件下载中断
- JAVA_OPTS=-Djetty.http.idleTimeout=300000 -Djetty.https.idleTimeout=300000 -Djava.util.prefs.userRoot=/nexus-data/java-prefs
# 时区配置,避免日志时间错乱
- TZ=Asia/Shanghai
networks:
- nexus-net
networks:
nexus-net:
driver: bridge
二、启动服务
- 启动服务
sudo docker-compose up -d
- 获取初始管理员密码:
只有当容器状态为Up时才能执行:
sudo docker exec nexus-repo cat /nexus-data/admin.password
复制输出的那串随机字符。
三、Nexus Web 界面核心配置
1. 首次登录
- 浏览器访问:
http://服务器IP:8081 - 用户名:
admin,密码粘贴上述初始密码 - 登录后按提示设置新密码
2. 开启匿名访问
匿名访问允许开发人员无需账号即可下载依赖,仅上传需认证:
- 左侧菜单:
Security→Anonymous Access - 勾选
Enable anonymous access - 点击
Save保存配置
3. 创建 Maven 仓库
需创建 4 类仓库(3 基础仓 + 1 仓库组),实现「正式版 / 快照版分离 + 中央仓代理 + 统一访问入口」:
表格
|
仓库类型 |
名称 |
核心配置 |
作用 |
|
Hosted(Releases) |
maven-releases |
Version Policy: ReleaseDeployment Policy: Disable redeploy |
存放稳定正式版包,禁止重复上传覆盖 |
|
Hosted(Snapshots) |
maven-snapshots |
Version Policy: SnapshotDeployment Policy: Allow redeploy |
存放开发中快照包,支持频繁更新覆盖 |
|
Proxy(Central) |
maven-central |
Remote Storage: |
代理阿里云中央仓,加速依赖下载并缓存 |
|
Group |
maven-public |
成员仓库:maven-releases、maven-snapshots、maven-central(顺序可调整) |
统一访问入口,项目只需配置此地址 |
具体创建步骤:
A. 正式版仓库(maven-releases)
- 左侧
Repositories→Create repository→ 选择maven2 (hosted) - 填写配置:
- Name:
maven-releases - Version Policy:
Release - Deployment Policy:
Disable redeploy(生产环境推荐,防止正式版被误覆盖)
- 点击
Create repository完成创建。
B. 快照版仓库(maven-snapshots)
- 同上,选择
maven2 (hosted) - 填写配置:
- Name:
maven-snapshots - Version Policy:
Snapshot - Deployment Policy:
Allow redeploy(快照版需频繁更新)
- 点击
Create repository完成创建。
C. 代理中央仓库(maven-central)
- 选择
maven2 (proxy) - 填写配置:
- Name:
maven-central - Remote Storage:
https://maven.aliyun.com/repository/public(国内优先阿里云,速度快)
- 点击
Create repository完成创建。
D. 仓库组(maven-public)
- 选择
maven2 (group) - 填写配置:
- Name:
maven-public - Member repositories: 将右侧的
maven-releases、maven-snapshots、maven-central依次添加到左侧 - 顺序建议:正式版 / 快照版在前,代理仓在后(优先读取本地包)
- 点击
Create repository完成创建。
最终统一访问地址:http://服务器IP:8081/repository/maven-public/
四、客户端配置
在开发人员电脑的 Maven 配置文件 settings.xml 中添加以下配置:
<settings>
<!-- 将所有请求指向您的私有仓库组 -->
<mirrors>
<mirror>
<id>nexus-public</id>
<!-- * 表示拦截所有请求 -->
<mirrorOf>*</mirrorOf>
<name>Nexus Public Mirror</name>
<url>http://服务器IP:8081/repository/maven-public/</url>
</mirror>
</mirrors>
</settings>
五、验证是否成功
在任意配置了上述 settings.xml 的项目中,运行 mvn clean install。观察控制台日志,应该能看到从您的 http://服务器IP:8081/... 下载依赖,而不是去 repo.maven.apache.org。
- 本文标签: 工具
- 本文链接: https://xiaolanzi.cyou/article/72
- 版权声明: 本文由卓原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
