简介Nexus Repository Manager 3.50.0-01 是面向 Windows 64 位系统的仓库管理软件主要服务于需要搭建 Maven 私服、统一管理构建产物的软件开发团队与运维人员。它支持 Maven、npm、Docker 等多种构建工具可集中存储与发布软件包并通过细粒度权限控制保障仓库内容的完整性与安全性同时优化了存储与检索速度提升构建部署效率。压缩包共 690 个文件约 240.15MB以 419 个 jar 核心库、82 个 dll 动态链接库、22 个 exe 可执行程序为主辅以 xml、properties、cfg 等配置文件和 png、gif 等界面资源结构完整开箱即可部署。目前已有 494 人学习下载。借助该安装包读者可快速搭建本地 Maven 私服掌握仓库创建、代理配置、权限分配与依赖缓存等关键环节为团队内部构件共享与持续集成提供稳定支撑。1. 从一台被 Nexus 拖垮的构建机说起上周帮一个朋友收拾他团队里那台构建服务器Windows Server 20198 核 16G跑 Jenkins 拉代码、跑 Maven 打包本来挺稳。结果他们为了图省事在同一个目录里先后解压过两个不同版本的 Nexus Repository服务注册表里还留着旧版本的残留项最后表现是nexus.exe /run能起来但 Web 控制台 8081 端口时通时不通Maven 拉依赖间歇性 502。折腾了一下午最后把目录清空、服务删干净、重新解压nexus-3.50.0-01-win64.zip才恢复正常。这件事让我意识到Nexus 在 Windows 上的安装坑不在“装不上”而在“装完之后环境不干净”。nexus-3.50.0-01-win64.zip这个包本身是免安装的绿色压缩包解压即用但它的运行依赖 JVM、依赖目录权限、依赖sonatype-work数据目录的独立位置。很多人把它当成一个普通 exe 双击就完事结果后面配置私服、配代理仓库、配 blob 存储时处处别扭。这篇笔记面向的是需要在 Windows 上搭一套本地或内网 Maven / npm / Docker 私服的开发者尤其是那些第一次接触 Nexus、或者被旧版本残留坑过的人。我会把版本选择、解压路径、JVM 参数、服务注册、仓库配置、验证跑通这一整条链路拆开写每一步都落到能直接抄的命令和配置上。装之前先把环境列清楚比装完再救火省事得多。2. 装前环境核对JDK、目录与端口三件事2.1 JDK 版本怎么选别用系统自带那个Nexus 3.50.0 对 JDK 的要求是 JDK 8 或 JDK 11官方推荐 JDK 8。这里有个反直觉的点很多人机器上已经装了 JDK 17 甚至 JDK 21觉得版本越高越好直接拿高版本 JDK 去跑 Nexus结果启动时报Unsupported class file major version或者java.lang.NoClassDefFoundError。原因是 Nexus 3.50 内部依赖的一些库还没适配高版本 JDK 的模块化限制。我一般会单独给 Nexus 准备一个 JDK 8 的运行时不和系统里其他 JDK 混用。Windows 上可以用压缩版的 JDK解压到D:\tools\jdk8然后在 Nexus 的启动脚本里显式指定JAVA_HOME而不是依赖系统环境变量。这样做的另一个好处是以后系统 JDK 升级不会波及 Nexus。验证 JDK 是否可用用这条命令D:\tools\jdk8\bin\java -version输出里应该看到1.8.0_xxx字样。如果输出的是 17 或 21说明你调用的还是系统 PATH 里的 java需要检查路径写对没有。参数说明-version只打印版本信息不会真正启动 JVM 进程适合快速核对。2.2 解压路径与数据目录分离nexus-3.50.0-01-win64.zip解压后会有两个顶层目录nexus-3.50.0-01是程序目录sonatype-work是数据目录。默认情况下sonatype-work会生成在程序目录的上一级。这个默认行为在测试环境没问题但在生产或长期使用的机器上我强烈建议把数据目录单独放到一个盘比如D:\nexus-data。原因很直接程序目录以后升级版本是要整个替换的如果数据目录混在里面升级时容易误删。分离之后升级只需要解压新版本、改一下nexus.vmoptions里的数据路径旧数据原封不动。具体做法是在nexus-3.50.0-01\bin\nexus.vmoptions文件里加一行-Dkaraf.dataD:\nexus-data参数说明karaf.data是 Nexus 底层 Karaf 容器的数据根目录所有仓库内容、blob、配置、日志都从这里派生。改完这一行Nexus 启动时会自动在D:\nexus-data下创建完整目录结构。注意路径不要带中文和空格Windows 上带空格的路径在服务注册时经常出玄学问题。2.3 端口与防火墙预检Nexus 默认监听 8081 端口。装之前先确认这个端口没被占用netstat -ano | findstr :8081如果输出里有LISTENING说明端口被占了要么停掉占用进程要么改 Nexus 端口。改端口在nexus-3.50.0-01\etc\nexus-default.properties里application-port8081 application-host0.0.0.0参数说明application-port是 Web 控制台和仓库服务的统一入口端口application-host设为0.0.0.0表示允许内网其他机器访问如果只想本机访问就改成127.0.0.1。改完记得在 Windows 防火墙里放行对应端口否则内网同事连不上会以为是 Nexus 没起来。提示端口预检这一步很多人跳过结果装完发现 8081 被某个监控 agent 占了排查半天。花一分钟 netstat 一下比事后翻日志快。3. 解压与首次启动从命令行到 Web 控制台3.1 解压与目录结构确认把nexus-3.50.0-01-win64.zip解压到D:\nexus解压后确认目录结构D:\nexus\nexus-3.50.0-01\bin\nexus.exe D:\nexus\nexus-3.50.0-01\etc\nexus-default.properties D:\nexus\nexus-3.50.0-01\bin\nexus.vmoptions这三个文件是后面配置的核心。nexus.exe是 Windows 下的启动器它负责读取nexus.vmoptions里的 JVM 参数再拉起 Java 进程。nexus-default.properties管端口和上下文路径。nexus.vmoptions管内存、数据目录、临时目录。我一般会先不改任何配置直接跑一次nexus.exe /run看看默认状态下能不能起来。这一步的目的是确认 JDK 能被正确找到、端口没冲突、目录权限没问题。如果默认都起不来先别急着改配置先把基础环境修好。3.2 用 /run 前台启动做冒烟测试进入D:\nexus\nexus-3.50.0-01\bin执行nexus.exe /run参数说明/run是前台运行模式日志直接打在控制台方便看启动过程。启动成功会看到类似Started Sonatype Nexus OSS 3.50.0-01的输出。这个过程第一次会比较慢因为要初始化数据目录、建默认仓库、生成安全配置通常 1 到 3 分钟。如果卡在某个阶段不动重点看日志里有没有java.io.IOException或AccessDeniedException。前者多半是端口或路径问题后者是目录权限问题。Windows 上如果解压到了C:\Program Files下面普通用户没有写权限Nexus 建不了数据目录就会报 AccessDenied。所以解压路径选D:\这种非系统盘、非受保护目录能省掉一大类权限坑。启动完成后浏览器打开http://localhost:8081应该能看到 Nexus 的登录页。默认管理员用户名是admin密码不在文档里而是存在数据目录的一个文件里D:\nexus-data\admin.password用记事本打开这个文件复制里面的随机密码登录。登录后会强制要求修改密码改成一个自己记得住的。这个初始密码文件在修改密码后会被删除所以第一次登录后如果没记下来就只能走密码重置流程了。3.3 注册为 Windows 服务前台跑通之后下一步是注册成 Windows 服务让它开机自启、后台运行。命令是nexus.exe /install NexusRepo参数说明/install是注册服务后面的NexusRepo是服务名可以自定义。注册完成后用nexus.exe /start NexusRepo启动nexus.exe /stop NexusRepo停止。如果想卸载服务用nexus.exe /uninstall NexusRepo。这里有个血泪经验注册服务之前一定要确认nexus.vmoptions里的JAVA_HOME或 java 路径是写死的绝对路径不要依赖系统环境变量。因为 Windows 服务是以 SYSTEM 账户运行的它读不到你当前用户的环境变量。如果服务启动时报Unable to find java八成就是这个原因。解决办法是在nexus.vmoptions里加一行-Djava.homeD:\tools\jdk8或者直接在服务注册时指定 java 路径。我一般用前者改配置文件比改服务参数直观。注意服务注册后如果修改了nexus.vmoptions需要先/stop再/start才生效直接重启服务不会重新读取配置。这个细节很多人踩过改了内存参数发现没生效以为改错了文件。4. 仓库配置代理、宿主与仓库组怎么摆4.1 先理解三种仓库类型的分工Nexus 里的仓库分三类代理仓库proxy、宿主仓库hosted、仓库组group。代理仓库用来代理远程的中央仓库比如 Maven Central第一次拉取时缓存到本地后续就走本地缓存。宿主仓库用来存放自己团队发布的构件比如内部 jar 包、npm 包。仓库组则是把多个代理仓库和宿主仓库聚合成一个地址客户端只需要配一个 URL 就能同时访问多个仓库。我一般会建三个 Maven 仓库一个maven-central代理仓库指向 Maven Central一个maven-releases宿主仓库放正式版本一个maven-snapshots宿主仓库放快照版本然后建一个maven-public仓库组把这三个聚合起来。客户端只需要配maven-public的地址。配置入口在 Web 控制台的Settings - Repositories - Create repository。代理仓库的 Remote storage 填https://repo1.maven.org/maven2/宿主仓库的 Version policy 分别选 Release 和 Snapshot。仓库组里把三个仓库按顺序加进去代理仓库放前面宿主仓库放后面。4.2 客户端 settings.xml 怎么配服务端配好之后客户端 Maven 的settings.xml里加一个 mirrormirror idnexus/id mirrorOf*/mirrorOf urlhttp://192.168.1.100:8081/repository/maven-public//url /mirror参数说明mirrorOf设为*表示所有仓库请求都走 Nexus包括插件仓库。url里的 IP 换成 Nexus 所在机器的内网地址maven-public是仓库组的名称。如果只想代理部分仓库可以把*改成central或*,!my-repo这种排除写法。配完之后删掉本地.m2/repository里某个依赖的目录重新执行mvn clean package观察控制台是否从 Nexus 地址下载。如果看到Downloading from nexus: http://192.168.1.100:8081/...说明代理生效了。4.3 npm 与 Docker 仓库的额外注意点Nexus 3.50 也支持 npm 和 Docker 仓库。npm 代理仓库的 Remote storage 填https://registry.npmjs.org/客户端用npm config set registry http://192.168.1.100:8081/repository/npm-public/切换。Docker 仓库稍微特殊需要额外配一个 HTTP Connector 端口比如 8082然后在 Docker 客户端配置insecure-registries。这里有个容易忽略的点Docker 仓库如果配了 HTTPS 但证书不对客户端会直接拒绝连接报x509: certificate signed by unknown authority。内网环境如果不想折腾证书就用 HTTP 端口加insecure-registries简单直接。配置位置在Settings - Repositories - Docker - HTTP里勾选端口并启用。提示仓库配置改完后建议用mvn -X开 debug 日志跑一次构建能看到完整的仓库请求链路。比在 Web 界面里猜哪个仓库生效了要靠谱。5. 避坑与排查五个真实踩过的坑5.1 服务启动报 1067进程意外终止现象nexus.exe /start NexusRepo后服务状态一闪就变成“已停止”事件查看器里报错误 1067。原因nexus.vmoptions里的-Xms或-Xmx设得太大超过了机器可用内存或者karaf.data指向的目录不存在且没有创建权限。解决先把-Xmx降到 1024m 试启动确认能起来再逐步往上加。数据目录如果不存在手动建好并给 SYSTEM 账户完全控制权限。我一般用icacls D:\nexus-data /grant SYSTEM:(OI)(CI)F这条命令赋权。5.2 控制台能打开但拉依赖 502现象浏览器访问 8081 正常但 Maven 构建时拉依赖报 502 Bad Gateway。原因Nexus 的代理仓库连不上远程中央仓库通常是机器没有外网访问权限或者 DNS 解析失败。解决在 Nexus 所在机器上用curl https://repo1.maven.org/maven2/测试连通性。如果不通检查代理设置或 DNS。如果通但 Nexus 还是 502去Settings - Repositories里点开代理仓库用Test connection按钮测一下看具体报错。5.3 升级后旧数据读不出来现象把程序目录换成新版本启动后仓库列表空了或者报 blob 存储找不到。原因新版本的nexus.vmoptions里没有保留karaf.data的路径配置Nexus 在默认位置新建了一个空的数据目录。解决升级前先备份nexus.vmoptions升级后把数据路径那行加回去。如果已经启动了空目录停掉服务删掉新建的空sonatype-work把路径改回旧数据目录再启动。5.4 管理员密码文件找不到现象第一次启动后在数据目录里找不到admin.password文件。原因Nexus 3.50 在某些 Windows 环境下会把密码文件生成在etc目录而不是数据目录或者因为权限问题写入失败。解决用dir /s admin.password在整个 Nexus 相关目录下搜一遍。如果确实没有停掉服务删掉数据目录下的db文件夹重启服务让它重新初始化。注意这会清空已有配置只适合全新安装的场景。5.5 磁盘写满导致服务假死现象Nexus 进程还在但 Web 控制台打不开日志里刷No space left on device。原因blob 存储默认放在数据目录长期使用后缓存了大量构件把磁盘写满。解决定期清理不需要的缓存或者在Settings - Blob Stores里把 blob 存储指向另一个大容量盘。我一般会在nexus.vmoptions里把java.io.tmpdir也指到大盘避免临时文件把系统盘撑爆。6. 装完怎么验证三条命令确认整套环境跑通装完不算完能验证跑通才算。我一般用三条命令做最终确认分别覆盖服务状态、仓库代理、构件发布三个环节。第一条确认服务状态和端口监听sc query NexusRepo netstat -ano | findstr :8081sc query的输出里STATE应该是RUNNING。netstat应该看到 8081 处于LISTENING。两条都对说明服务层面没问题。第二条确认代理仓库能正常缓存远程构件curl -I http://192.168.1.100:8081/repository/maven-public/org/springframework/spring-core/5.3.20/spring-core-5.3.20.pom返回HTTP/1.1 200 OK说明代理链路通。如果返回 404说明仓库组里没包含代理仓库或者路径写错了。如果返回 502回到 5.2 排查外网连通性。第三条确认宿主仓库能发布构件。在本地 Maven 项目的pom.xml里加 distributionManagementdistributionManagement repository idnexus-releases/id urlhttp://192.168.1.100:8081/repository/maven-releases//url /repository /distributionManagement然后在settings.xml里配好对应的用户名密码执行mvn deploy。看到BUILD SUCCESS并且 Nexus 的Browse里能搜到刚发布的构件说明发布链路也通了。这三条走完整套 Nexus 私服就算真正跑通了。从那以后我每次装完 Nexus都会强制走一遍这三条验证不管前面启动看起来多顺利。因为启动成功和仓库可用是两回事中间隔着代理配置、权限、网络好几层。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?