
简介面向Java开发与运维人员的Nexus 3.45.0 Windows 64位离线安装包用于搭建企业级Maven私服解决依赖下载慢、内部构件统一管理及权限控制等问题。资源包共690个文件以420个jar程序库、82个dll动态链接库为核心同时包含exe启动器、xml/cfg配置文件、properties参数文件等整体约240.62MB可支持在Windows环境快速部署。已有415人学习下载。通过解压并运行nexus.exe可快速启动服务结合sonatype-work数据目录与nexus程序目录的划分能清晰梳理配置、日志、存储库等运行时数据对需要构建私有构件仓库、缓存中央仓库依赖的团队而言是开箱即用的基础环境。资源内置完整程序文件与默认安全配置便于在隔离网络或企业内部直接安装适合已有一定Maven使用经验的工程师进一步配置仓库分组、代理与权限策略。 我先把话放在前面这周我刚在一台新的 Windows Server 上把 Nexus 3.45.0-01-win64 从下载到投入使用完整跑了一遍整个过程踩了几个坑也理清了不少以前没仔细想过的配置逻辑。如果你正准备在公司内网搭一个私服或者只是想把本地的 Maven、npm、PyPI 依赖统一管理起来这篇内容应该能帮你少走弯路。我尽量把版本选择、安装细节、仓库规划和权限配置讲透也会把我在实际部署中遇到的报错和排查过程写出来。1. 项目概述Nexus 3.45.0-01 是什么为什么值得装1.1 版本号里的信息量先拆一下标题里这串字符nexus-3.45.0-01-win64。nexus 指 Sonatype Nexus Repository Manager这是目前市面上用得最广的私服/制品仓库管理工具之一3.45.0 是产品版本号01 是构建号win64 说明这是 Windows 64 位安装包。相比 2.x 时代只能在 Maven 场景里发光发热3.x 版本把 npm、Docker、PyPI、NuGet、Go、Raw 等格式的仓库全收编了一个服务搞定所有依赖管理需求。3.45.0 这个版本在 3.x 分支里属于比较稳定的一个发布。我看到网上很多团队还在跑 3.29、3.37 这些老版本其实如果你要考虑新装或者老版本升级3.45 是个不错的选择它把不少安全问题修了内置的 REST API 和任务调度也经过了很长时间的打磨做团队级共享私服完全没问题。如果你之前用的是 2.x那升级到 3.45 之后等于换了一个引擎界面和仓库模型都要重新适应但换来的是更强的格式支持和更简洁的权限体系。1.2 解决什么痛点我接触 Nexus 的第一个场景是开发机每次执行mvn clean package都要从中央仓库拉几百兆依赖网络一波动构建就断。后来公司内网干脆完全不连外网这时候如果本地没有一份依赖缓存新入职同事的电脑连最基础的 Spring Boot 项目都跑不起来。Nexus 干的活就两件一是把外网仓库的内容缓存到内网二是把团队自己产出的构件统一收口管理。前者解决下载慢、网络不稳的问题后者解决多个人重复上传、版本混乱的问题。适合参考这篇内容的人我列一下打算在 Windows 机器上搭私服的运维或开发被 Maven Central 下载速度折磨、想搭本地缓存的 Java 开发团队里想统一管 npm/pip 依赖的前端或 Python 工程师还有正在规划离线环境内网部署的架构师。2. 安装前的环境准备与初始化配置2.1 JDK 版本与内存规划的坑Nexus 本身是基于 Java 的所以装之前先把 JDK 准备好。官方文档要求 JDK 8但我实测用 JDK 11 也可以稳定运行不过不建议直接上 JDK 17有些 Groovy 脚本和插件可能不兼容。这里有个细节Nexus 自带的启动脚本会自动找JAVA_HOME如果你机器上装了多个 JDK最好在nexus-3.45.0-01\bin\nexus.vmoptions里显式把 JVM 参数调好避免启动时加载了不对的版本。内存规划是我每次都要强调的点。默认的-Xmx2703m对 4G 内存的机器来说已经很吃紧尤其是你同时代理 Maven、npm、PyPI 三个仓库时JVM 堆内存经常会飙到 80% 以上。建议 8G 内存的机器给 Nexus 分 4G也就是把-Xmx改到4096m同时把-Xms也设成同样的值减少运行时堆扩容的性能损耗。2.2 端口冲突要提前查Nexus 默认端口是 8081如果你机器上已经装了 Tomcat、Jenkins 或者其他 Web 服务8081 很容易被占用。我第一次装的时候没注意结果nexus.exe /run启动后浏览器一直打不开。检查方法很简单启动前先执行netstat -ano | findstr :8081如果有输出说明端口被占用了。一种做法是去nexus-3.45.0-01\etc\nexus.properties里改application-port8082另一种是把占用端口的服务停掉。建议用前者因为改了端口之后所有仓库 URL 都会带上新端口虽然不影响功能但如果你后续要迁移或者接 CI/CD统一规划端口会更省事。2.3 首次启动与 admin 密码重置解压后进入bin目录执行nexus.exe /install可以注册成 Windows 服务然后nexus.exe /start启动。这里有个小坑服务启动后 Nexus 要等一两分钟才能完全就绪不是在命令行看到Started就能立刻访问。我的判断方法是看logs\nexus.log里有没有包含Started Sonatype Nexus这行日志。首次登录会用到一个自动生成的 admin 密码存放在sonatype-work\nexus3\admin.password文件里。用这个密码登录后会强制让你改密码还会问是否开启匿名访问。我的建议是如果是团队自用私服开启匿名读取是合理的省去每个人配账号的麻烦如果你要严格控制依赖下载来源就关掉匿名让所有访问都走认证。3. 仓库规划与代理缓存配置实操3.1 三种仓库类型怎么理解Nexus 的仓库模型并不复杂proxy 仓库负责代理外部源hosted 仓库用来存自己上传的东西group 仓库把多个仓库聚合成一个统一入口。打个比方proxy 像小区门口的快递代收点别人寄来的包裹先由它代收你随时去取取过一次之后它就留在那个点里了hosted 仓库像你自己家的储物柜自己买的东西放进去自己用也可以让别人来取group 仓库则像一个大型超市里面既有代售的商品proxy也有自有品牌hosted你只需要从超市门口进不需要分别去厂家和仓库提货。实际配仓库的时候我一般会按语言生态各建一组Maven 配一个 maven-central 的 proxy再配一个 maven-releases 和一个 maven-snapshots 的 hosted最后用 maven-public 这个 group 把它们串起来。npm 和 PyPI 同理。这样的好处是开发人员只需要在工具里配置一个 group 地址剩下的分类存储和远程拉取都由 Nexus 处理。3.2 Maven 仓库配置要点配置 Maven proxy 仓库时远程仓库地址填https://repo1.maven.org/maven2/关键的一个配置项是 Auto Blocking 和 Maximum Component Age。前者会在远程源不可用时自动把仓库标记为离线后者控制缓存组件的保留时间。如果不是特别在意实时性我会把 Maximum Component Age 设成 1440 分钟也就是一天刷新一次这样既能拿到新版本又不会频繁检查远程源导致性能浪费。开发机接入私服时最省事的做法是在settings.xml里配一个 mirror把所有 Maven Central 的请求都指向 Nexusmirror idnexus/id mirrorOf*/mirrorOf nameNexus Repository Manager/name urlhttp://your-nexus-ip:8081/repository/maven-public//url /mirror注意这里mirrorOf写的是*意思是所有仓库请求都走这个镜像。有些同学会纠结是不是该只镜像 central我自己的实践是在团队内部直接全部镜像过来统一走 Nexus 还能自动记录每个开发者的拉取行为排查问题的时候很有用。3.3 npm 与 PyPI 仓库配置的异同npm 的 proxy 远程地址是https://registry.npmjs.org/PyPI 的 proxy 远程地址是https://pypi.org/simple/。这两个配起来和 Maven 大同小异但 npm 有个需要注意的地方如果你的 Nexus 是在内网开发者本机的.npmrc文件里要把 registry 指向 group 地址同时关闭严格 SSL 校验否则如果 Nexus 没配 HTTPS 证书npm 会直接拒绝连接。PyPI 这边有网友经常问“在局域网无互联网环境下怎么用 Nexus 建 PyPI 库”其实关键就是先在一台能联网的机器上把 proxy 仓库配好让需要的包都缓存下来然后把网络断掉内网的使用者照样可以通过 group 地址安装包。但要注意的是 pip 默认会走https://pypi.org/simple如果你是在离线环境首次安装包需要先把包装到 Nexus 的 hosted 仓库里或者提前通过 proxy 仓库把包拉一遍否则离线机器上的 pip 还是会尝试访问外网然后超时。4. 权限配置与团队协作实操4.1 先理解 Nexus 的权限模型Nexus 的权限模型围绕 Repository仓库、Role角色、User用户三层来设计。默认有三个内置角色nx-admin管理员、nx-anonymous匿名用户、nx-repository-view---browse浏览用户。我自己做权限规划的原则是宁可少给不可多给。管理员账号只留给维护者普通开发者给 browse 和 read 权限需要上传构件的同事再加 edit 权限。有个细节很多新手会忽略Nexus 支持对 Privilege 做细粒度控制比如你可以指定某个角色只能访问maven-public这个 group不能直接访问 hosted 仓库。这在团队里非常有用因为 hosted 仓库里的内容还没经过 review如果所有人都能直接拉取很容易把未验证的包带到生产构建里。4.2 实操案例给开发组和 CI 账号分配权限我这次部署时建了两个角色一个是dev-role拥有所有 group 仓库的 browse 和 read 权限另一个是ci-role额外拥有 maven-releases 和 maven-snapshots 的 add、edit 权限这样 CI 流水线发布构件时不会因为权限不足而失败。创建用户的路径是 Settings - Users - Create User。给 CI 建独立账号是必须的千万不要用 admin 账号去跑流水线否则一旦 Jenkins 的凭据泄露等于把整个 Nexus 的管理权交出去了。我见过一个团队因为偷懒直接用 admin 账号当 Jenkins 凭据后面不得不重置所有仓库权限非常痛苦。4.3 匿名访问开启还是关闭这个问题没有标准答案关键看你的网络环境和使用场景。如果你处于公司内网开发机都加了域认证那开启匿名访问可以省去很多配置成本如果你的 Nexus 暴露在不可信网络或者仓库里有商业保密组件匿名访问一定要关。我在实际项目里一般会开启匿名读、关闭匿名写。这样一个新同事入职只用配一个私服地址就能拉依赖但要往 hosted 仓库传东西就必须登录。实现方式是在 Roles 里给 anonymous 用户授予 group 仓库的 browse 权限不给任何 hosted 仓库的 edit/add 权限从根上防止误传。5. 离线环境部署、服务维护与常见问题排查5.1 离线环境下的仓库初始化技巧说到离线环境这是我在这次部署里花时间最多的地方。内网机器通常不能直接访问外网但你又希望能用 Nexus 管理 PyPI 或 Maven 依赖。我的做法是分三步走第一步在一台能联网的机器上装一个临时 Nexus把需要的依赖都通过 proxy 仓库拉一遍第二步把sonatype-work\nexus3\blobs目录整体拷贝到内网机器的对应目录第三步启动内网 Nexus把仓库的 Remote Storage 指向一个内网可达的地址或者直接设成本地文件路径。这样搞下来离线环境也能用上完整的依赖缓存唯一要注意的是 blobs 目录拷完后必须保持目录结构不变否则 Nexus 扫描不到已有的 blob 对象。5.2 定期备份与升级注意事项Nexus 的数据有两种一种是元数据数据库一种是二进制内容blob。很多人都知道备份但只备份了sonatype-work目录结果恢复的时候发现仓库列表都在构件却访问不了。正确做法是同时备份nexus-3.45.0-01\etc配置和sonatype-work\nexus3数据。我自己写了一个 PowerShell 脚本每天凌晨打包这两个目录到另一个盘符同时通过 Nexus 自带的 Admin - System - Tasks 创建一个定期备份任务把数据库和配置一并导出。升级到新版本时我的经验是先看官方升级文档确认跨版本是否支持直接升级。3.45.0 这个版本对 3.30 以上的直接升级是友好的但如果你还在 3.2x建议先中间跳一个版本再往上升避免数据库 schema 不兼容导致数据丢失。升级前一定做全量备份这绝对不是废话我身边真有同事因为跳过这一步把整个仓库元数据搞坏的。5.3 高频报错与解决办法速查我在这次部署前后遇到不少报错也到网上查了很多相关信息整理成一个速查表覆盖面比较广报错现象可能原因解决办法浏览器无法访问 8081服务未启动成功或端口占用查看 nexus.log确认端口占用并释放等待服务完全就绪启动后进程自动退出JVM 内存配置过低或 JDK 版本不符调整-Xmx与-Xms检查 JAVA_HOME 指向拉取 Maven 依赖报 401访问 group 需要认证但未配置匿名读权限给匿名用户授予 group 仓库 browse 权限或为开发机配置账号pip install 超时PyPI group 地址配置错误检查.pip/pip.conf的 index-url确保指向 group 地址而非 proxy 地址上传构件失败 403用户没有 hosted 仓库的 write 权限给对应角色添加仓库的 addedit 权限blob 存储空间不足没有清理策略或缓存增长过快配置定期任务清理无用组件清除已删除 blob后台任务一直卡住磁盘 IO 瓶颈或数据库锁检查磁盘健康状态重启服务必要时重建任务5.4 Windows 服务维护小技巧最后分享几个 Windows 下维护 Nexus 的小经验。一是安装服务后一定要在服务管理器里把登录身份改成专用账号不要用 Local System否则文件权限在有些场景下会出问题。二是服务重启后最好写个探活脚本因为 Nexus 启动比较慢如果你用自动化部署工具做滚动更新探活间隔设太短会导致误判。我一般写一个最简单的 PowerShell 探活$status Invoke-WebRequest -Uri http://localhost:8081/service/rest/v1/status -UseBasicParsing if ($status.StatusCode -eq 200) { Write-Host Nexus is ready }把这个脚本挂在 CI 里等接口返回 200 之后再执行后续命令比固定 sleep 60 秒靠谱得多。写在最后的个人体会这次部署 Nexus 3.45.0-01-win64 的整个过程让我重新梳理了一遍私服仓库的规划思路。以前总觉得配置仓库就是把几个按钮点一点真正跑起来才发现仓库类型怎么选、权限怎么分、离线环境怎么预热缓存每个环节都有讲究。如果只让我留一条建议那就是“先规划再动手”这比任何花哨的配置都重要。另外备份这事千万别偷懒等你真正需要恢复的时候就会感谢那个愿意每天写脚本备份的自己。本文还有配套的精品资源点击获取