原创

搭建极速稳定的 Maven 私有仓库

温馨提示:
本文最后更新于 2026年03月04日,已超过 22 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

 

在团队开发中,依赖下载慢、第三方包不稳定、内部组件共享难是常见痛点。搭建一个私有的 Maven 仓库(Nexus Repository Manager)是解决这些问题的最佳方案。本文将基于 Docker 部署 Nexus 3,并针对 低内存环境 和 大文件传输超时 问题进行深度优化,同时配置 阿里云镜像加速,打造极速、稳定的内网/外网通用仓库。

一、环境准备

  1. 创建目录并赋予正确权限
# 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
  1. 编写 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

二、启动服务

  1. 启动服务
sudo docker-compose up -d
  1. 获取初始管理员密码
    只有当容器状态为 Up 时才能执行:
sudo docker exec nexus-repo cat /nexus-data/admin.password

复制输出的那串随机字符。

三、Nexus Web 界面核心配置

1. 首次登录

  • 浏览器访问:http://服务器IP:8081
  • 用户名:admin,密码粘贴上述初始密码
  • 登录后按提示设置新密码

2. 开启匿名访问

匿名访问允许开发人员无需账号即可下载依赖,仅上传需认证:

  1. 左侧菜单:SecurityAnonymous Access
  2. 勾选Enable anonymous access
  3. 点击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: https://maven.aliyun.com/repository/public

代理阿里云中央仓,加速依赖下载并缓存

Group

maven-public

成员仓库:maven-releases、maven-snapshots、maven-central(顺序可调整)

统一访问入口,项目只需配置此地址

具体创建步骤:

A. 正式版仓库(maven-releases)

  1. 左侧RepositoriesCreate repository → 选择maven2 (hosted)
  2. 填写配置:
    • Name: maven-releases
    • Version Policy: Release
    • Deployment Policy: Disable redeploy(生产环境推荐,防止正式版被误覆盖)
  1. 点击Create repository完成创建。

B. 快照版仓库(maven-snapshots)

  1. 同上,选择maven2 (hosted)
  2. 填写配置:
    • Name: maven-snapshots
    • Version Policy: Snapshot
    • Deployment Policy: Allow redeploy(快照版需频繁更新)
  1. 点击Create repository完成创建。

C. 代理中央仓库(maven-central)

  1. 选择maven2 (proxy)
  2. 填写配置:
    • Name: maven-central
    • Remote Storage: https://maven.aliyun.com/repository/public(国内优先阿里云,速度快)
  1. 点击Create repository完成创建。

D. 仓库组(maven-public)

  1. 选择maven2 (group)
  2. 填写配置:
    • Name: maven-public
    • Member repositories: 将右侧的maven-releasesmaven-snapshotsmaven-central依次添加到左侧
    • 顺序建议:正式版 / 快照版在前,代理仓在后(优先读取本地包)
  1. 点击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

正文到此结束