算账机器人 Maven 私有仓库 Nexus 简单使用指南
Nexus 是目前企业中最常用的 Maven 私有仓库管理工具,主要用于存储公司内部开发的 Jar 包、代理远程公共仓库(如中央仓库、阿里云镜像),以及统一管理第三方依赖。以下是基于 Nexus 3.x 版本的快速搭建与使用流程。
一、环境准备与安装
1.前置条件
JDK 环境:Nexus 基于 Java 开发需安装 JDK 8 或 JDK 11+。
Maven 环境:本地需安装并配置好 Maven。
内存要求:建议服务器至少拥有 2GB 以上可用内存。
2. 安装方式
方式 A:直接下载安装(Linux/CentOS)
从 Sonatype 官网下载 Nexus Repository Manager OSS 版本压缩包。
解压到指定目录(如 /opt/nexus)。
注意:出于安全考虑,不建议使用 root 用户启动。需创建专用用户 nexus 并授权。
bash
useradd nexus
chown -R nexus:nexus /opt/nexus
chown -R nexus:nexus /opt/sonatype-work # 数据目录
启动服务:
bash
cd /opt/nexus/bin
./nexus start
默认端口为 8081,访问 http://<IP>:8081 即可看到登录界面。
方式 B:Docker 快速部署(推荐)
使用 Docker 可以简化环境配置和数据持久化:
bash
docker run -d \
--name nexus3 \
-p 8081:8081 \
-v /usr/local/nexus-data:/nexus-data \
sonatype/nexus3
-v 参数将容器内的数据目录映射到宿主机,防止容器删除后数据丢失。
3. 初始登录
用户名:admin
密码:首次启动时,密码生成在日志文件或特定路径下。
Linux 直接安装路径:/opt/sonatype-work/nexus3/admin.password
Docker 路径:/nexus-data/admin.password
登录后系统会提示修改默认密码。
二、Nexus 核心概念与仓库类型
在 Nexus 界面中,主要涉及三种仓库类型,理解它们是使用的前提:
Proxy(代理仓库):
作用:代理远程公共仓库(如 Maven Central、Aliyun)。
原理:当本地请求依赖时,Nexus 先去远程下载并缓存到本地,后续请求直接使用缓存,加速构建并节省带宽。
Hosted(宿主仓库):
作用:存储公司内部发布的私有 Jar 包。
分类:通常分为 releases(发布版,稳定)和 snapshots(快照版,开发中)。
Group(组仓库):
作用:将多个 Proxy 和 Hosted 仓库组合成一个统一的 URL。
优势:开发人员只需在 Maven 中配置一个 Group 地址,即可同时获取公网依赖和内部私有依赖。
三、Maven 客户端配置
为了让本地 Maven 项目能使用 Nexus 私服,需要修改本地 Maven 的 settings.xml 文件(通常位于 ~/.m2/settings.xml 或 Maven 安装目录 conf/settings.xml)。
1. 配置镜像(Mirrors)
将所有请求指向 Nexus 的 Group 仓库地址:
xml
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf> <!-- * 表示拦截所有仓库请求 -->
<url>http://<Nexus-IP>:8081/repository/maven-public/</url>
</mirror>
</mirrors>
注:maven-public 是 Nexus 默认创建的组仓库 ID,可在 Nexus 后台查看或自定义。
2. 配置服务器认证(Servers)
如果向私服上传 Jar 包(Deploy),需要配置账号密码:
xml
<servers>
<server>
<id>nexus-releases</id> <!-- 对应 pom.xml 中的 distributionManagement id -->
<username>admin</username>
<password>your_password</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>your_password</password>
</server>
</servers>
四、项目上传与依赖使用
1. 上传 Jar 包到私服
在项目的 pom.xml 中配置分发管理地址:
xml
<distributionManagement>
<repository>
<id>nexus-releases</id> <!-- 必须与 settings.xml 中的 server id 一致 -->
<url>http://<Nexus-IP>:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://<Nexus-IP>:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
执行上传命令:
bash
mvn clean deploy
若版本号以 -SNAPSHOT 结尾,会自动上传到 snapshots 仓库。
若为正式版本号,则上传到 releases 仓库。
2. 依赖私有 Jar 包
其他项目只需在 pom.xml 中正常声明依赖即可,Maven 会通过配置的 Mirror 自动从 Nexus 下载:
xml
<dependencies>
<dependency>
<groupId>com.company.internal</groupId>
<artifactId>common-utils</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
五、常见问题排查
401 Unauthorized 错误:
原因:pom.xml 中 <id> 与 settings.xml 中 <server><id> 不一致,或者账号密码错误。
解决:检查 ID 是否完全匹配,确认 Nexus 用户具有部署权限。
403 Forbidden 错误:
原因:试图向 releases 仓库上传快照版本,或向 snapshots 仓库上传正式版本,且仓库策略禁止覆盖。
解决:检查版本号命名规范,或在 Nexus 后台调整仓库的 "Deployment Policy"。
依赖下载慢:
原因:Nexus 代理的远程仓库地址访问缓慢。
解决:在 Nexus 后台创建新的 Proxy 仓库,地址设置为阿里云镜像(https://maven.aliyun.com/repository/public/),并将其加入 Group 仓库成员中,优先排序。
通过上述步骤,即可快速搭建并使用 Nexus 作为企业的 Maven 私有仓库,实现依赖的统一管理和高效构建。