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 | <servers> |
3.pom.xml 中:
1 | <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