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 都强制走一遍断网构建,确认私服真正接管了依赖拉取,而不是看起来配好了、实际还在走外网。希望这套流程能帮到你,少踩几个我踩过的坑。

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

相关新闻

Linux LED驱动开发实战:字符设备、GPIO与设备树全解析

Linux LED驱动开发实战:字符设备、GPIO与设备树全解析

不用把点灯想得那么高端。第一次在Linux下让一颗LED亮起来&#xff0c;这件事本质上就是一次“内核驱动初体验”的压缩包&#xff1a;字符设备框架、GPIO子系统、设备树匹配、内核模块编译&#xff0c;这些听起来毫无关联的东西&#xff0c;最后全压在一个0.1瓦的小灯泡上。很多…

2026/11/14 8:30:49 阅读更多 →
AI生成可编辑架构图:基于draw.io XML的工程实践与布局算法

AI生成可编辑架构图:基于draw.io XML的工程实践与布局算法

很多人一听到“让 AI 画架构图”&#xff0c;第一反应是“不就是把需求丢给对话式大模型&#xff0c;让它生成一段 Mermaid 嘛”。我一开始也这么想&#xff0c;直到自己动手做了一个叫 next-ai-draw-io 的小项目——它的目标不只是让 AI 吐出图片&#xff0c;而是真正替你把架…

2026/11/14 4:33:10 阅读更多 →
Chrome/Edge DevTools调试实战:从快捷键到断点的前端排查全攻略

Chrome/Edge DevTools调试实战:从快捷键到断点的前端排查全攻略

Chrome和Edge的调试工具&#xff0c;大概是前端工程师每天相处时间最长的东西。我早年只会按F12看一眼Console里的报错&#xff0c;遇到红字就截图发群里问&#xff0c;后来熟练到能在Network里抓包、在Sources里打断点、在Performance里录帧率&#xff0c;才发现DevTools这套东…

2026/11/10 4:44:26 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻