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。