mvn clean deploy -Dmaven.test.skip=true推送maven-snapshots maven-releases机制

为什么 Maven 只推送到 snapshots

Maven 的 deploy 行为受版本号控制,而不是受仓库名控制。
版本号包含 -SNAPSHOT,Maven 会强制上传到 snapshots 仓库。

举例:

  • 0.0.3-SNAPSHOT → 上传 snapshots 仓库
  • 0.0.3 → 上传 releases 仓库

这属于 Maven 内建机制:

  • snapshot 代表“开发中,可重复修改(覆盖)”,上传时会带时间戳。
  • release 代表“稳定版,不允许覆盖”

你传的版本:

0.0.3-SNAPSHOT

所以 Maven 只会上传到:

<snapshotRepository>

如何同时推送 snapshots + releases?

短答案:Maven 不能同时推 SNAPSHOT 与 RELEASE,因为一个版本只能是其中之一,必须发布两次:
一次 SNAPSHOT
一次 RELEASE(去掉 -SNAPSHOT,版本号不能重复


如何推送到 releases 仓库?

1.把版本号改为正式版本,例如:

pom.xml:

1
<version>0.0.3</version>

或者使用 Maven Release Plugin:

mvn release:prepare
mvn release:perform

release 插件会自动:
构建 → 修改 pom → 打 tag → 上传 releases → 恢复为下一个 SNAPSHOT。


2.settings.xml 要正确配置两个仓库

确保 settings.xml 里有 snapshots 和 releases 两个 <server>

1
2
3
4
5
6
7
8
9
10
11
12
13
<servers>
<server>
<id>xxx-snapshots</id>
<username>admin</username>
<password>***</password>
</server>

<server>
<id>xxx-releases</id>
<username>admin</username>
<password>***</password>
</server>
</servers>

3.pom.xml 中:

1
2
3
4
5
6
7
8
9
10
11
<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>

公共仓库禁止PUT

你当前的问题:你配置错仓库 URL
你现在 push 的是:

/repository/maven-public

maven-public 是 Nexus 只读 聚合仓库,不支持 PUT → 返回 405
这就是你日志里的错误:

status code: 405, reason phrase: PUT (405)

应该 push:

/repository/maven-snapshots
/repository/maven-releases