mvn临时推送提示405分析解决

问题

关键错误:

1
2
3
4
status code: 405, reason phrase: PUT (405)
....
Uploading to pxb7-releases:
http://nexus.pp.internal/repository/maven-public/...

现在的问题已经不是 Maven 配置问题,而是 Nexus 仓库地址选错了

分析

1. 根本原因

你现在配置的是:

1
-DaltDeploymentRepository=pxb7-releases::http://nexus.pp.internal/repository/maven-public/

其中:maven-public通常是 Nexus 的 Group Repository(仓库组)。它的用途是:

1
2
3
4
5
6
7
8
9
开发者

maven-public

┌───────────────┐
│ maven-releases│
│ maven-snapshots│
│ 其他代理仓库 │
└───────────────┘

它主要用于 下载依赖,不是用于 PUT 上传。而mvn deploy需要向 Nexus 发:PUT所以 Nexus 对 maven-public 返回:405 Method Not Allowed这正好符合现象。


2. 你应该使用哪个地址?

你的版本是:0.0.1-SNAPSHOT,所以应该上传到:maven-snapshots

例如 Nexus 中:

1
2
3
maven-public
maven-releases
maven-snapshots

应该使用:

1
-DaltDeploymentRepository=pp-snapshots::http://nexus.pp.internal/repository/maven-snapshots/

完整:

1
2
3
4
mvn deploy \
-pl valuation-service-api \
-DskipTests \
-DaltDeploymentRepository=pp-snapshots::http://nexus.pp.internal/repository/maven-snapshots/
1
2
3
4
mvn clean deploy \
-pl valuation-service-api \
-DskipTests \
-DaltDeploymentRepository=pp-snapshots::http://nexus.pp.internal/repository/maven-snapshots/

settings.xml

1
2
3
4
5
6
7
8
9
<settings>
<servers>
<server>
<id>pp-snapshots</id>
<username>${env.NEXUS_USERNAME}</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
</servers>
</settings>

一句话:maven-public 用来拉,maven-snapshots/releases 用来推。