nexus仓库类型
问题
日志已经说得非常清楚:405 PUT Not Allowed。这句话等同于 Nexus 对你说:“兄弟,你往一个不能上传的仓库 PUT 了东西。”deploy 插件正在尝试把 SNAPSHOT 上传到 maven-public,但 public 是一个聚合仓库(group),它只负责聚合,不允许上传,于是 405。
Nexus 仓库结构
Nexus 有 3 种仓库类型:
- hosted(【私服】)
- proxy(代理中央仓库-【代理mirror】)
- group(只读聚合,不能写)
你的 URL 是:
http://nexus.xxx.internal/repository/maven-public
这明显是一个 group,不能 PUT,于是 deploy 插件一 PUT → 405 → 构建失败。
解决
1.确保 SNAPSHOT 上传目标仓库应该是 hosted
你需要一个类似:
http://nexus.xxx.internal/repository/maven-snapshots/
你的 release 则应该是:
http://nexus.xxx.internal/repository/maven-releases/
绝对不能用 maven-public。
2.settings.xml 正确写法
<servers>
<server>
<id>xxx-snapshots</id>
<username>xxx</username>
<password>xxx</password>
</server>
<server>
<id>xxx-releases</id>
<username>xxx</username>
<password>xxx</password>
</server>
</servers>
3.pom.xml 的 distributionManagement 必须指向 hosted 仓库
<distributionManagement>
<snapshotRepository>
<id>xxx-snapshots</id>
<url>http://nexus.xxx.internal/repository/maven-snapshots/</url>
</snapshotRepository>
<repository>
<id>xxx-releases</id>
<url>http://nexus.xxx.internal/repository/maven-releases/</url>
</repository>
</distributionManagement>
4.快速验证
你可以 curl 测试:
curl -X PUT http://nexus.pxb7.internal/repository/maven-public/test
一定返回 405而:
curl -X PUT http://nexus.pxb7.internal/repository/maven-snapshots/test
会提示 401(因为你没带认证)但不会 405。