简介: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 nexusnexus是服务名,可以自定义。安装完成后,如果机器上有多个 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 实体转义,比如&写成&。最省事的做法是改密码时只用字母和数字。
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 都强制走一遍断网构建,确认私服真正接管了依赖拉取,而不是看起来配好了、实际还在走外网。希望这套流程能帮到你,少踩几个我踩过的坑。
本文还有配套的精品资源,点击获取