news 2026/10/21 6:37:31

Windows 下 Nexus 3.45.0 搭建 Maven 私服实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows 下 Nexus 3.45.0 搭建 Maven 私服实战指南

简介:nexus-3.45.0-01-win64 是 Sonatype 官方推出的开源仓库管理器 Nexus 在 Windows 64 位平台上的完整安装包,面向 Java 开发者、DevOps 工程师及需要搭建 Maven 私服的团队。它可作为内部受控仓库,集中存储、代理与分发构建工件,规避直连中央仓库带来的网络延迟与安全隐患,适合企业级依赖治理与内网离线开发场景。压缩包共 690 个文件,约 240.62MB,以 420 个 jar 核心库、82 个 dll 动态链接库、22 个 exe 可执行程序为主,辅以 xml、properties、cfg 等配置文件和少量 png、gif 界面资源,结构完整可直接部署。已有 417 人学习下载。解压后包含 nexus-3.45.0-01 程序目录与 sonatype-work 数据目录,前者承载 Web 应用、脚本与启动器,后者保存配置、日志及仓库内容,便于理解运行机制并完成日常维护与优化。

1. 从一台 Windows 构建机说起:nexus-3.45.0-01-win64 到底装给谁用

上周帮一个小组调构建环境,他们的 Windows 构建机每次拉 Maven 依赖都要走外网,一个mvn clean package卡在下载环节能等十几分钟,偶尔某个依赖源抽风,整条流水线直接红掉。问题不在代码,在于没有本地仓库代理。这种场景下,最省事的做法就是在内网起一个 Maven 私服,把中央仓库的依赖缓存到本地,后续所有构建都从私服取。Nexus Repository Manager 3 就是干这个的,而nexus-3.45.0-01-win64是它在 Windows 上的 64 位发行包,解压即用,不需要额外装数据库。这篇记录的是我在 Windows 环境里从零把 Nexus 3.45.0 跑起来、配好 Maven 私服、再验证构建能走通的完整过程。适合手上有 Windows 构建机、想搭内网 Maven 仓库但还没动手的开发者,也适合装过一次但被端口、内存、服务注册折腾过的熟手对照排查。

2. 装前把环境对齐:JDK、端口、目录一次说清

2.1 版本选择与 JDK 依赖

nexus-3.45.0-01-win64这个包名里,3.45.0-01是 Nexus 的版本号,win64表示它是 Windows 64 位专用发行包,内部已经带了 Jetty 容器和启动脚本,不需要你单独装 Tomcat。但有一点必须提前确认:Nexus 3.x 系列运行依赖 JDK,3.45.0 这个版本我一般配 JDK 8 或 JDK 11,实测两者都能跑起来。如果你机器上只有 JDK 17,启动脚本可能会因为模块化访问限制报错,常见做法是单独装一个 JDK 8 或 11 放在固定目录,启动时通过环境变量指过去,而不是改系统默认 JDK。

检查当前 JDK 版本:

java -version

输出里如果看到1.8.0_xxx或11.0.x,基本可以直接用。如果是17或更高,建议先装一个 JDK 11 备用。Nexus 启动脚本会读JAVA_HOME,所以最稳妥的方式是给 Nexus 单独指定,而不是动全局。

2.2 端口与目录规划

Nexus 3.45.0 默认监听两个端口:8081给 Web 控制台和仓库服务,8082给 Docker 相关功能(如果不用可以不管)。装之前先确认 8081 没被占用:

netstat -ano | findstr :8081

如果输出为空,说明端口空闲。有输出的话记下 PID,去任务管理器确认是什么进程,能换就换,不能换就在 Nexus 配置里改端口。

目录方面,我习惯把 Nexus 放在一个独立盘符下,比如D:\nexus,避免放在C:\Program Files下面,因为那个路径有空格和权限限制,启动脚本处理起来容易出玄学问题。解压后的目录结构大致是:

目录/文件作用
bin启动脚本,含nexus.exe和nexus.vmoptions
etc配置文件,nexus-default.properties在这里
data运行时数据,仓库内容、索引、配置都存这里
lib依赖 jar 包
tmp临时目录

data目录是后面备份和迁移的核心,装之前心里要有数。

2.3 解压与首次启动

把nexus-3.45.0-01-win64压缩包解压到D:\nexus,注意解压后可能多一层目录,确认bin目录直接在D:\nexus下面。然后以管理员身份打开命令行,进入bin目录:

cd /d D:\nexus\bin nexus.exe /run

/run参数表示前台运行,日志直接打在控制台,方便第一次看启动过程。启动成功会看到类似Started Sonatype Nexus的日志。第一次启动会初始化data目录,耗时可能一两分钟,别急着 Ctrl+C。

提示:第一次启动如果卡在Initializing很久,多半是磁盘写入慢或者杀毒软件在扫描,等几分钟再看。

启动完成后浏览器访问http://localhost:8081,能看到 Nexus 界面就说明服务起来了。初始管理员密码在D:\nexus\sonatype-work\nexus3\admin.password文件里,登录后第一件事就是改密码,这个后面细说。

3. 把 Nexus 注册成 Windows 服务:别每次手动开命令行

3.1 为什么不用/run长期跑

nexus.exe /run适合调试,但窗口一关服务就停,构建机重启后还得手动开,不现实。生产或长期使用的做法是注册成 Windows 服务,开机自启,后台运行。Nexus 自带nexus.exe支持/install和/start参数,不需要额外装 NSSM 之类的工具。

3.2 安装服务并指定 JDK

在bin目录下执行:

nexus.exe /install nexus

nexus是服务名,可以自定义。安装完成后,如果机器上有多个 JDK,需要告诉服务用哪个。编辑bin\nexus.vmoptions文件,在开头加上:

-Djava.home=D:\jdk11

把路径换成你实际 JDK 的目录。这一步很关键,服务启动时不会读你当前命令行的JAVA_HOME,只认这个配置。

然后启动服务:

nexus.exe /start

检查服务状态:

nexus.exe /status

看到Running就对了。如果启动失败,去D:\nexus\sonatype-work\nexus3\log\nexus.log看日志,最常见的报错是 JDK 路径不对或者端口被占。

3.3 内存参数调整

nexus.vmoptions里还有几个内存参数,默认值在构建机这种场景下偏小,依赖一多容易 OOM。我一般会改成:

-Xms1024m -Xmx2048m -XX:MaxDirectMemorySize=2048m

-Xms是初始堆,-Xmx是最大堆,MaxDirectMemorySize影响文件传输和缓存。改完保存,重启服务生效:

nexus.exe /stop nexus.exe /start

注意:改vmoptions后必须重启服务,/run模式下改这个文件不生效,因为前台运行读的是另一套参数。

3.4 服务卸载与重装

如果服务装坏了,比如路径写错、JDK 找不到,先卸载再重装:

nexus.exe /stop nexus.exe /uninstall

然后重新/install。卸载不会删data目录,仓库数据还在,这点可以放心。但如果你改了data目录位置,需要在etc\nexus-default.properties里改nexus-data的路径,这个文件里有一行nexus-data=${user.dir}/../sonatype-work/nexus3,按需调整。

4. 配 Maven 私服:仓库、代理、权限三件事

4.1 登录与改密码

浏览器打开http://localhost:8081,点右上角 Sign in,用户名admin,密码从admin.password文件里复制。登录后会强制让你改密码,新密码建议用字母加数字组合,别用特殊符号,因为后面 Maven 的settings.xml里写密码时特殊符号要转义,容易踩坑。

改完密码后,admin.password文件会自动删除,如果没删可以手动删掉,留着是个安全隐患。

4.2 创建代理仓库

Nexus 默认已经建好了几个仓库,其中maven-central是代理中央仓库的,但默认可能没启用。进入Settings→Repositories,找到maven-central,确认Online状态是勾选的。如果没勾,勾上保存。

如果公司内网有自建的中央仓库镜像,可以新建一个代理仓库:Create repository→ 选maven2 (proxy),填名称比如maven-aliyun,Remote storage填镜像地址,其他默认,保存。

4.3 创建宿主仓库和仓库组

宿主仓库用来放公司内部自己打的包。Create repository→maven2 (hosted),名称比如maven-releases,Version policy选Release,Deployment policy选Allow redeploy(方便覆盖测试包)。再建一个maven-snapshots,Version policy选Snapshot。

仓库组是把多个仓库聚合成一个入口,Maven 只需要配一个地址就能同时拉代理仓库和宿主仓库。Create repository→maven2 (group),名称比如maven-public,把maven-central、maven-releases、maven-snapshots都加到Member repositories里,顺序上代理仓库放前面,宿主仓库放后面。

4.4 Maven settings.xml 配置

在开发机的~/.m2/settings.xml里加:

<mirrors> <mirror> <id>nexus-maven</id> <mirrorOf>*</mirrorOf> <url>http://192.168.1.100:8081/repository/maven-public/</url> </mirror> </mirrors>

mirrorOf写*表示所有仓库请求都走 Nexus,url里的 IP 换成 Nexus 所在机器的实际 IP,端口默认 8081,路径/repository/maven-public/对应你建的仓库组名称。

如果内部仓库需要认证,在settings.xml的<servers>里加:

<server> <id>nexus-maven</id> <username>deploy</username> <password>你的密码</password> </server>

id要和mirror里的id一致,否则认证不生效。

4.5 项目 pom.xml 发布配置

内部项目要发布到 Nexus,在pom.xml里加:

<distributionManagement> <repository> <id>nexus-maven</id> <url>http://192.168.1.100:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-maven</id> <url>http://192.168.1.100:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>

id同样对应settings.xml里的 server 配置。执行mvn deploy时,release 版本走maven-releases,snapshot 版本走maven-snapshots。

5. 避坑与排查:装 Nexus 3.45.0 最容易翻车的五件事

5.1 启动报错Unsupported major.minor version

现象:nexus.exe /run或服务启动后立刻退出,日志里出现Unsupported major.minor version 52.0或类似版本号。

原因:Nexus 3.45.0 编译时用的 JDK 版本和你当前运行的不匹配。52.0 对应 JDK 8,如果日志里出现更高的版本号,说明 Nexus 需要更高 JDK,但你装的是低版本。

解决:确认nexus.vmoptions里的-Djava.home指向的 JDK 版本。3.45.0 我实测 JDK 8 和 11 都行,如果指向 JDK 17 可能报模块化错误,换回 11 即可。

5.2 8081 端口被占用

现象:启动日志显示Address already in use,服务起不来。

原因:机器上已经有其他进程占了 8081,常见的是之前装过 Nexus 没卸干净,或者某个监控代理用了这个端口。

解决:netstat -ano | findstr :8081找到 PID,任务管理器确认进程。如果是残留 Nexus,nexus.exe /uninstall后重装;如果是其他进程,改 Nexus 端口:编辑etc\nexus-default.properties,把application-port=8081改成其他值,重启服务。

5.3 服务启动后浏览器打不开

现象:nexus.exe /status显示 Running,但浏览器访问http://localhost:8081一直转圈或拒绝连接。

原因:Nexus 启动后初始化data目录需要时间,尤其是第一次启动,可能一两分钟内 Web 服务还没就绪。另外,如果机器开了防火墙,8081 可能被拦。

解决:先等两分钟再刷新。还不行就看nexus.log,如果日志停在Initializing不动,检查data目录所在磁盘空间是否充足。防火墙方面,在 Windows 防火墙里给 8081 端口加一条入站规则。

5.4 Maven 拉依赖报 401 或 403

现象:mvn clean package时提示401 Unauthorized或403 Forbidden,依赖下载失败。

原因:settings.xml里配了 server 认证,但id和mirror的id不一致,或者密码里含特殊字符没转义。

解决:检查settings.xml里<server>的id是否和<mirror>的id完全一致。密码如果含&、<、>等字符,用 XML 实体转义,比如&写成&amp;。最省事的做法是改密码时只用字母和数字。

5.5 磁盘写满导致 Nexus 崩溃

现象:Nexus 运行一段时间后突然无法访问,日志报No space left on device。

原因:data目录里缓存了大量依赖,尤其是代理仓库的blobs目录,增长很快。

解决:定期清理不需要的缓存。Nexus 有清理任务:Settings→Tasks→Create task→ 选Admin - Cleanup repositories to remove snapshots或Maven - Delete unused snapshots,按需配置。另外,把data目录放在大容量盘上,别放系统盘。

6. 装完怎么验证:从空仓库到构建跑通

6.1 验证 Nexus 服务本身

服务注册好之后,先确认开机自启没问题。重启机器,不手动执行任何命令,等几分钟后直接访问http://localhost:8081,能打开登录页就说明服务自启正常。这一步很多人跳过,结果机器一重启服务没起来,构建全挂。

再看一眼日志有没有异常:

type D:\nexus\sonatype-work\nexus3\log\nexus.log | findstr "ERROR"

没有 ERROR 输出就基本干净。

6.2 验证 Maven 私服拉取

找一台开发机,settings.xml按第 4 章配好,然后执行:

mvn dependency:get -Dartifact=org.apache.commons:commons-lang3:3.12.0

这条命令会从 Nexus 拉取commons-lang3的 3.12.0 版本。第一次执行时,Nexus 会去中央仓库代理下载,然后缓存到本地。执行成功后,去 Nexus 控制台的Browse→maven-central里搜commons-lang3,能看到缓存记录,说明代理仓库工作正常。

再执行一次同样的命令,这次应该秒下,因为已经走本地缓存了。如果第二次还是慢,检查settings.xml的mirrorOf是不是写成了central而不是*,写central只代理中央仓库,其他仓库请求还是走外网。

6.3 验证内部包发布与拉取

在内部项目里执行mvn deploy,把包发布到maven-releases。发布成功后,在 Nexus 控制台Browse→maven-releases里能看到刚发布的包。然后新建一个空项目,在pom.xml里依赖这个内部包,执行mvn compile,如果能从 Nexus 拉到,说明宿主仓库和仓库组都配对了。

这一步有个常见坑:maven-public仓库组的Member repositories顺序如果不对,Maven 可能先找到代理仓库里的旧版本,而不是你刚发布的内部版本。我一般把宿主仓库放在代理仓库前面,确保内部包优先。

6.4 一个我每次都会走的检查习惯

装完 Nexus 后,我会做一次「断网构建」测试:把开发机的外网断掉,只留内网,然后执行mvn clean package。如果构建能成功,说明所有依赖都走了 Nexus 私服,没有偷偷走外网。这个测试能暴露很多配置遗漏,比如某个仓库没加到 group 里,或者mirrorOf没覆盖全。

从那以后我每次装完 Nexus 都强制走一遍断网构建,确认私服真正接管了依赖拉取,而不是看起来配好了、实际还在走外网。希望这套流程能帮到你,少踩几个我踩过的坑。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 6:37:28

SpringBoot+Vue+MySQL在线文档管理系统毕设完整实战指南

做毕业设计选在线文档管理系统这个题&#xff0c;SpringBootVueMySQL 这套组合几乎成了标准答案&#xff0c;每年都有大量学生做类似项目。但正因为做的人多&#xff0c;“能跑”和“做得好”之间的差距就特别明显。如果一个系统只有最基本的上传下载&#xff0c;答辩老师一眼就…

作者头像 李华
网站建设 2026/10/21 6:35:58

知识工作插件化:构建可编程、可组合的智能工作流底座

1. 项目概述&#xff1a;这不是一个插件&#xff0c;而是一套知识工作者的“操作系统增强层”“knowledge-work-plugins”这个标题乍看像某个开源仓库的命名&#xff0c;但拆开来看——knowledge work&#xff08;知识工作&#xff09;、plugins&#xff08;插件&#xff09;—…

作者头像 李华
网站建设 2026/10/21 6:35:26

uniapp考试答题小程序源码解析:从题库加载到自动判分

简介&#xff1a;这是一份基于uniapp框架开发的考试答题类小程序源码&#xff0c;面向希望学习跨平台应用开发、了解前端答题逻辑的开发者与在校学生。项目实现了单选、多选、判断三种题型的答题界面&#xff0c;并支持上一题、下一题的自由切换&#xff0c;题目与答案均以静态…

作者头像 李华
网站建设 2026/10/21 6:34:49

STM32+OpenMV电赛巡线小车:从看懂到敢改的完整工程拆解

简介&#xff1a;这份资源是2024年全国大学生电子设计竞赛H题巡线小车的完整工程&#xff0c;面向备赛电赛控制类赛题的学生与嵌入式爱好者&#xff0c;主控采用STM32&#xff0c;配合OpenMV摄像头实现循迹方案。由于作者缺少官方器材&#xff0c;工程以摄像头巡线替代灰度传感…

作者头像 李华
网站建设 2026/10/21 6:34:48

基于OpenCVSharp的角点检测实现工业平面度测量

做工业检测的人对“平整度”三个字应该都不陌生。我之前接了一个项目&#xff0c;要给一批金属面板做平面度初筛&#xff0c;预算有限、又不能上激光轮廓仪&#xff0c;最后是拿一台普通工业相机加OpenCVSharp的角点检测把这活儿干的。当时最头疼的是网上资料大多在讲相机标定、…

作者头像 李华
网站建设 2026/10/21 6:34:10

八种排序算法深度解析:从原理到实战场景选择指南

1. 为什么我要把排序算法重新梳理一遍做开发这些年&#xff0c;排序算法这东西就像厨房里的盐——平时炒菜不一定想起来&#xff0c;但真到用的时候&#xff0c;手边没有或者用错了&#xff0c;整道菜就废了。我最初学排序是大二的数据结构课&#xff0c;那时候背代码、记复杂度…

作者头像 李华