scm connection 配置错误会导致 deploy 失败,必须以 scm:git: 开头并使用合法 git 协议 url(如 https:// 或 git://),不可混用 developerconnection 的 ssh 格式,且 url 不能含分支或子路径。

scm connection 配置写错会导致 deploy 失败
不是所有 Maven 插件都忽略 scm 配置,但 maven-deploy-plugin 和一些 CI 工具(如 Jenkins 的 Git 插件)会读取它来推断源码归属。如果 connection 值格式非法或协议不匹配,mvn deploy 可能静默跳过 SCM 信息,或在某些仓库管理器(如 Nexus)中触发校验警告,甚至阻断发布流程。
-
connection必须用scm:git:开头,后面跟 Git 协议 URL,不能直接写https://或git@ - 常见错误是把
developerConnection的 SSH 格式误套到connection上,比如写成scm:git:git@github.com:user/repo.git—— 这是非法的,Maven 不识别 SSH 路径作为只读连接 - 正确写法只支持
https或git协议:例如scm:git:https://github.com/user/repo.git或scm:git:git://github.com/user/repo.git
developerConnection 和 connection 别混用
两者语义不同:connection 是只读地址,供构建系统拉取源码;developerConnection 是可写地址,供开发者 push。Maven 本身不强制校验,但 Sonatype OSSRH 审核、某些 CI/CD 流水线会检查二者是否合理匹配。
- 如果你用 HTTPS 克隆仓库,
connection用scm:git:https://...,developerConnection也得用 HTTPS(哪怕你本地配了 SSH key),否则 OSSRH 会拒收 - 若项目允许 SSH 提交,
developerConnection可写为scm:git:ssh://git@github.com:user/repo.git(注意是ssh://+ 用户名前缀,不是git@) - 很多团队只填
connection,留空developerConnection—— 这合法,但会丢失协作上下文,部分自动化工具可能报 warn
URL 中的分支和路径不能乱加
scm 的 URL 不支持带 @branch 或子目录路径。Maven 解析时会直接截断或报错,导致元数据生成异常。
- 错误示例:
scm:git:https://github.com/user/repo.git@main→@main会被忽略,且部分插件解析失败 - 错误示例:
scm:git:https://github.com/user/repo.git/submodule→ 路径部分无效,SCM 工具无法定位仓库根 - 正确做法:URL 必须指向仓库根,分支信息由
scm下的tag字段表达(如<tag>v1.2.0</tag>),不是 URL 的一部分
CI 环境下 scm 配置影响 release 插件行为
像 maven-release-plugin 这类工具会依赖 scm 配置自动执行 git push 和打 tag。如果 developerConnection 不可用或权限不足,mvn release:prepare 会在最后一步卡住或报 Failed to execute goal org.apache.maven.plugins:maven-release-plugin:3.0.1:prepare。
- 确保 CI 机器能通过
developerConnection的协议访问仓库(HTTPS 需 token,SSH 需部署私钥) - 不要在
pom.xml里硬编码个人 token 或密码,改用settings.xml的<servers></servers>配置凭据 - 如果项目用 GitHub Actions,记得在 workflow 中启用
permissions: contents: write,否则即使 URL 正确也会被拒绝 push
connection 写成裸 HTTPS 地址、或者复制粘贴时漏掉 scm:git: 前缀 —— 这类错误不会报红,但后续环节会莫名其妙失效。










