验证 nexus 是否就绪需先用 curl -i 检查 http/1.1 200 ok 响应头并含 x-frame-options,再确认 karaf.log 中出现 “started nexus repository manager”;若 maven 连不上,需启用匿名访问或配置 settings.xml 中匹配的 server 凭据;proxy 仓库拉不到 snapshot 需设 version policy 为 snapshot 并勾选清除过期快照;部署失败 405 错误主因是向 proxy/group 仓库 deploy,应改用 hosted 类型仓库;blob store 默认 400mb 容量易致 500 错误,需调大配额。

如何验证 Nexus 是否已正确监听 Maven 仓库端口
启动 Nexus 后,nexus-default-port(默认 8081)不一定立即可用,常见现象是浏览器访问 http://localhost:8081 显示连接被拒绝或空白页——这往往不是配置问题,而是服务尚未就绪或 JVM 还在初始化。
- 先用
curl -I http://localhost:8081检查 HTTP 响应头,返回HTTP/1.1 200 OK且含X-Frame-Options才算真正就绪 - 查看
sonatype-work/nexus3/log/karaf.log,搜索Started Jetty Server或Started Nexus Repository Manager,没看到就别急着配 Maven - 若改过
nexus.properties中的application-port,确认该端口未被占用(lsof -i :8081或netstat -an | grep 8081)
为什么 Maven 客户端连不上 Nexus 的 maven-public 仓库
多数报错是 Could not transfer artifact ... from/to nexus (http://...): Not authorized 或直接 401,根本原因不是密码错了,而是 Nexus 默认关闭了匿名访问,且 Maven 的 settings.xml 没配对应 server 凭据。
- Nexus 3.x 默认禁用
Anonymous Access:进 UI → Settings → Security → Anonymous,勾选Enable anonymous access或为具体仓库设权限 -
settings.xml中的id必须和<repository></repository>里的id完全一致,大小写敏感;比如仓库定义为<id>nexus</id>,则<server></server>的<id></id>也得是nexus - 用户名密码不能硬编码在
settings.xml,要用mvn --encrypt-password加密后填入settings-security.xml(但开发机可先明文测试)
proxy 类型仓库拉不到中央仓库的 SNAPSHOT 版本?
Nexus 默认把 https://repo.maven.apache.org/maven2/ 配成 proxy 仓库时,会忽略远程仓库的 SNAPSHOT 元数据更新策略,导致本地始终缓存旧的 maven-metadata.xml,进而无法解析最新快照版本。
- 进 Nexus UI → Repositories → maven-central → Configuration,将
Version policy改为Snapshot(不是Release) - 勾选
Remove snapshots from cache when metadata says they are outdated,否则旧快照会一直卡在本地缓存里 - Maven 端要显式加
-U参数强制更新快照(mvn clean compile -U),光靠 Nexus 刷新不触发客户端重检
部署 snapshot 构件到 Nexus 失败:405 Method Not Allowed
这个错误几乎全是路径或仓库类型不匹配导致的。Maven 尝试用 PUT 向一个只允许 GET 的仓库发请求,典型场景是往 proxy 或 group 仓库 deploy,而 Nexus 明确禁止这种操作。
- 确认目标仓库类型是
hosted,且Deployment policy设为Allow redeploy(如需覆盖同版本)或Disable redeployment(推荐) -
settings.xml中<distributionmanagement></distributionmanagement>的<repository></repository>和<snapshotrepository></snapshotrepository>必须指向不同id:前者对应release仓库(如maven-releases),后者必须是snapshot专用仓库(如maven-snapshots) - 检查
pom.xml的<version></version>是否含-SNAPSHOT(如1.0.0-SNAPSHOT),否则 Maven 会走 release 路径,而 release 仓库通常不允许 snapshot 版本上传
最常被跳过的一步:Nexus 的 blob store 容量限制默认只有 400MB,上传几个大依赖包就可能触发 500 Internal Server Error,但日志里只报 Insufficient space ——记得去 Settings → Blob Stores 把配额调大或关掉限制。










