一切福田,不離方寸,從心而覓,感無不通。

Maven私有仓库搭建与配置指南

目录


1. 概述

1.1 为什么需要私有Maven仓库?

私有Maven仓库在企业级开发中扮演着重要角色:

  1. 加速构建:缓存公共仓库的依赖,减少外网下载时间
  2. 内部共享:团队内部共享自研组件和工具包
  3. 安全控制:控制依赖版本,避免使用不安全的组件
  4. 离线开发:在无网络环境下也能进行开发
  5. 第三方jar管理:统一管理第三方或商业jar包
  6. 版本控制:统一管理依赖版本,避免版本冲突

1.2 Maven仓库类型

  • hosted(宿主仓库):存储本地上传的构件
    • releases:存储正式发布版本
    • snapshots:存储快照版本
  • proxy(代理仓库):代理远程仓库,如Maven Central
  • group(仓库组):聚合多个仓库,提供统一访问入口

2. 私有Maven仓库选型

2.1 主流方案对比

产品 开源版本 企业版本 特点 推荐场景
Nexus Repository 功能强大,社区活跃 中大型企业
JFrog Artifactory 支持多种格式,云原生 大型企业
Apache Archiva 轻量级,易部署 小型团队
阿里云Maven私服 托管服务,免运维 快速上线

2.2 本文选择

本指南以 Nexus Repository 3 为例,原因:

  • 开源免费
  • 功能完善
  • 社区活跃
  • 文档丰富
  • 易于部署和维护

3. Nexus Repository搭建

3.1 使用Docker部署Nexus

3.1.1 快速部署

 

3.1.2 使用Docker Compose部署

创建 docker-compose.yml

 

启动服务:

 

3.1.3 获取初始密码

 

3.1.4 访问Nexus
  1. 浏览器访问:http://your-server-ip:8081
  2. 点击右上角 Sign in
  3. 使用默认账号:
    • 用户名:admin
    • 密码:从上述命令获取
  4. 首次登录会提示修改密码并配置匿名访问

3.2 使用Kubernetes部署Nexus

3.2.1 创建命名空间

 

3.2.2 创建PVC(持久化存储)

创建 nexus-pvc.yaml

 

应用配置:

 

3.2.3 创建Deployment

创建 nexus-deployment.yaml

 

应用配置:

3.2.4 创建Service

创建 nexus-service.yaml

 

应用配置:

 

3.2.5 创建Ingress(可选)

创建 nexus-ingress.yaml

 

应用配置:

 

3.2.6 验证部署

 


4. Nexus仓库配置

4.1 创建仓库

登录Nexus后,进行仓库配置。

4.1.1 创建Blob Store(存储)
  1. 点击左侧菜单 Settings(齿轮图标)
  2. 选择 Repository > Blob Stores
  3. 点击 Create blob store
  4. 选择类型:File
  5. 配置:
    • Namemaven-releases-blob
    • Path: 默认即可
  6. 点击 Create blob store

重复以上步骤创建:

  • maven-snapshots-blob
  • maven-central-blob
4.1.2 创建Hosted仓库(releases)
  1. 点击 Repository > Repositories
  2. 点击 Create repository
  3. 选择 maven2 (hosted)
  4. 配置:

     
  5. 点击 Create repository
4.1.3 创建Hosted仓库(snapshots)
  1. 点击 Create repository
  2. 选择 maven2 (hosted)
  3. 配置:

     
  4. 点击 Create repository
4.1.4 创建Proxy仓库(代理Maven Central)
  1. 点击 Create repository
  2. 选择 maven2 (proxy)
  3. 配置:

     
  4. 点击 Create repository
4.1.5 创建Proxy仓库(代理阿里云Maven)

推荐添加阿里云镜像以加速国内访问:

  1. 点击 Create repository
  2. 选择 maven2 (proxy)
  3. 配置:

     
  4. 点击 Create repository
4.1.6 创建Group仓库(聚合所有仓库)
  1. 点击 Create repository
  2. 选择 maven2 (group)
  3. 配置:

     
  4. 在 Group 部分,将以下仓库添加到 Members(顺序很重要):

     
  5. 点击 Create repository
4.1.7 仓库结构总览

 


4.2 创建用户和权限

丁乔:创建角色 nx-deploy(我装的3.91.0,没有nx-deploy)

743a5449dd0a4f5c888990fbe93a6eff

 

4.2.1 创建部署用户(用于发布构件)
  1. 点击 Security > Users
  2. 点击 Create local user
  3. 配置:

     
  4. 点击 Create local user
4.2.2 创建开发者用户(用于拉取依赖)
  1. 点击 Create local user
  2. 配置:

     
  3. 点击 Create local user
4.2.3 配置匿名访问(可选)

如果希望内网用户无需认证即可拉取依赖:

  1. 点击 Security > Anonymous Access
  2. 勾选 Allow anonymous users to access the server
  3. 点击 Save

注意:生产环境建议禁用匿名访问,使用账号密码认证。


5. Maven客户端配置

5.1 配置settings.xml

Maven的全局配置文件通常位于:

  • Windows: C:\Users\{用户名}\.m2\settings.xml
  • Linux/Mac: ~/.m2/settings.xml
5.1.1 完整配置示例

 

5.1.2 配置说明

1. localRepository

  • 指定本地Maven仓库路径
  • 下载的依赖会存储在这里

2. servers

  • 配置Nexus的认证信息
  • <id> 必须与 pom.xml 中的 <id> 匹配
  • 分别配置releases和snapshots的认证

3. mirrors

  • 配置镜像,将所有Maven请求重定向到Nexus
  • <mirrorOf>*</mirrorOf> 表示代理所有仓库
  • 也可以配置为 <mirrorOf>central</mirrorOf> 只代理中央仓库

4. profiles

  • 定义Maven配置文件
  • 配置仓库地址和插件仓库地址
  • updatePolicy 配置更新策略:
    • always: 每次构建都检查更新
    • daily: 每天检查一次(默认)
    • never: 从不检查更新

5.2 配置项目pom.xml

5.2.1 基础配置

在项目的 pom.xml 中添加发布配置:

 

5.2.2 父POM配置(多模块项目)

对于多模块项目,在父 pom.xml 中配置:

 


6. 发布构件到私有仓库

6.1 使用Maven Deploy插件

6.1.1 发布SNAPSHOT版本

确保 pom.xml 中版本号包含 -SNAPSHOT 后缀:

 

执行发布命令:

 

6.1.2 发布RELEASE版本
  1. 修改 pom.xml 版本号,去掉 -SNAPSHOT

 

  1. 执行发布命令:

 

  1. 发布后建议立即升级版本并添加 -SNAPSHOT

 

6.1.3 只发布不构建

如果已经构建过,只想发布:

 

6.1.4 发布多模块项目

在父模块根目录执行:

 


6.2 发布第三方jar包

有时需要发布第三方提供的jar包(没有源码)。

6.2.1 使用命令行发布

 

参数说明:

  • groupId: 自定义group ID
  • artifactId: 自定义artifact ID
  • version: 版本号
  • packaging: 打包类型(jar/war/pom等)
  • file: jar文件路径
  • repositoryId: settings.xml中配置的server ID
  • url: Nexus仓库地址
6.2.2 同时发布jar和pom

 

6.2.3 使用Nexus UI上传
  1. 登录Nexus
  2. 点击左侧 Upload
  3. 选择仓库:maven-releases
  4. 填写GAV信息:
    • Groupcom.thirdparty
    • Artifactthird-party-lib
    • Version1.0.0
    • Packagingjar
  5. 选择jar文件
  6. 可选:上传pom文件和sources
  7. 点击 Upload
6.2.4 批量上传脚本

创建 upload-third-party.sh

 

执行脚本:

 


7. 从私有仓库拉取依赖

7.1 在项目中使用私有仓库的依赖

确保 settings.xml 和 pom.xml 已正确配置后,直接在 pom.xml 中添加依赖:

 

7.2 更新依赖

 

7.3 清理本地缓存

如果遇到依赖问题,可以清理本地缓存:

 


8. 常见问题与解决方案

8.1 认证失败

问题:发布时提示401 Unauthorized

解决方案

  1. 检查 settings.xml 中的 <server> 配置
  2. 确保 <id> 与 pom.xml 中的 <repository><id> 匹配
  3. 验证用户名密码是否正确
  4. 检查Nexus中用户是否有部署权限

 

8.2 无法下载依赖

问题:Maven无法从Nexus下载依赖

解决方案

  1. 检查Nexus服务是否运行
  2. 验证网络连接和防火墙
  3. 检查 settings.xml 中的镜像配置
  4. 查看Nexus日志:docker logs nexus3
  5. 清理本地缓存:rm -rf ~/.m2/repository/com/tigeriot

8.3 无法发布SNAPSHOT

问题:发布SNAPSHOT版本时提示不允许重复部署

解决方案
在Nexus中配置 maven-snapshots 仓库:

  1. 进入 Repository > Repositories
  2. 选择 maven-snapshots
  3. 设置 Deployment policy 为 Allow redeploy
  4. 点击 Save

8.4 SSL证书问题

问题:HTTPS连接提示证书验证失败

解决方案1:信任证书

 

解决方案2:使用HTTP(不推荐生产环境)

在 settings.xml 和 pom.xml 中使用 http:// 而非 https://

8.5 上传超时

问题:上传大文件时超时

解决方案

  1. 增加Nexus超时时间
  2. 使用Nginx反向代理时,增加超时配置:

 

  1. 在Maven中增加超时配置(pom.xml):

 

8.6 版本冲突

问题:依赖版本冲突

解决方案

 

 

8.7 磁盘空间不足

问题:Nexus磁盘空间占用过大

解决方案:配置自动清理策略

  1. 进入 Repository > Cleanup Policies
  2. 创建清理策略:

     
  3. 应用到 maven-snapshots 仓库
  4. 配置定时任务(System > Tasks):
    • Type: Cleanup repositories
    • Repository: maven-snapshots
    • Schedule: 每天凌晨3点

9. 最佳实践

9.1 版本管理策略

语义化版本

遵循语义化版本规范(Semantic Versioning):

  • 主版本号:不兼容的API变更
  • 次版本号:向下兼容的功能新增
  • 修订号:向下兼容的问题修复

 

SNAPSHOT vs RELEASE
  • SNAPSHOT
    • 用于开发阶段
    • 可以重复发布
    • Maven每次构建时会检查更新
    • 示例:1.0.0-SNAPSHOT
  • RELEASE
    • 用于正式发布
    • 不应重复发布(配置为Disable redeploy)
    • 稳定不变,适合生产环境
    • 示例:1.0.0

9.2 依赖管理

使用dependencyManagement

在父POM中统一管理版本:

 

子模块中无需指定版本:

 

定期更新依赖

 

9.3 安全实践

1. 使用加密密码

Maven支持密码加密:

 

创建 ~/.m2/settings-security.xml

 

加密服务器密码:

 

在 settings.xml 中使用加密密码:

 

2. 限制访问权限
  • 生产环境禁用匿名访问
  • 为不同角色创建专用账号
  • 定期审计用户权限
  • 使用LDAP/AD集成企业账号
3. 启用HTTPS

生产环境建议使用HTTPS:

 

9.4 备份策略

定期备份Nexus数据

 

配置定时任务:

 

9.5 性能优化

1. 调整JVM参数

 

2. 配置Blob Store
  • 为不同仓库使用独立的Blob Store
  • 定期清理不用的快照版本
  • 监控磁盘使用情况
3. 启用缓存

在Maven settings.xml 中配置合理的更新策略:

 

9.6 CI/CD集成

Jenkins集成示例

 

GitLab CI集成示例

创建 .gitlab-ci.yml

 


10. 总结

10.1 核心要点

  1. 选择合适的仓库方案:Nexus Repository是开源免费且功能强大的选择
  2. 正确配置认证:settings.xml中的server ID必须与pom.xml中的repository ID匹配
  3. 版本管理规范:开发用SNAPSHOT,发布用RELEASE
  4. 安全第一:使用加密密码、HTTPS、权限控制
  5. 定期备份:配置自动备份策略,防止数据丢失
  6. 性能优化:合理配置JVM参数和更新策略

10.2 快速参考命令

 

10.3 相关资源


文档版本: v1.0.0
最后更新: 2025-12-09
作者: Tiger IoT团队
适用范围: 企业内部微服务项目


附录A:Nexus Repository URL汇总

仓库类型 仓库名称 URL
Group maven-public http://nexus:8081/repository/maven-public/
Hosted maven-releases http://nexus:8081/repository/maven-releases/
Hosted maven-snapshots http://nexus:8081/repository/maven-snapshots/
Proxy maven-central http://nexus:8081/repository/maven-central/
Proxy maven-aliyun http://nexus:8081/repository/maven-aliyun/

附录B:常用Maven命令

 

附录C:settings.xml模板

提供一个完整的生产环境 settings.xml 模板,保存为独立文件方便使用:


祝您使用愉快!

 

from:https://www.cnblogs.com/clnchanpin/p/19468854