发布至Maven Central时遇离线模式缓存缺失及400错误求助
Maven Central发布1.0.5版本失败问题排查
问题背景
已成功向Maven Central发布5个版本,发布1.0.5版本时连续遇到两类错误:
- 开启Gradle离线模式时:
任务 ':publishMavenJavaPublicationToOSSRHRepository' 执行失败。
无法将发布物'mavenJava'发布至仓库'OSSRH'
离线模式下无可用缓存资源'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/jspinak/brobot/1.0.5-SNAPSHOT/maven-metadata.xml'。
- 关闭离线模式后:
无法获取'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/jspinak/brobot/1.0.5-SNAPSHOT/maven-metadata.xml'。
收到服务器返回的400状态码:Bad Request 禁用Gradle离线模式并同步项目
已尝试运行Gradle工具栏的generateMetadataFileForMavenJavaPublication,无效果;已在Sonatype论坛发帖求助。项目为开源项目,可查看library模块的build.gradle配置。
排查与解决方案
1. 核对版本号与仓库URL
400 Bad Request多因请求格式或路径错误导致:
- 确认版本号
1.0.5-SNAPSHOT无特殊字符,符合Maven规范 - 检查build.gradle中OSSRH仓库URL:快照版本应使用
https://s01.oss.sonatype.org/content/repositories/snapshots/,正式版本用https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/,不要混淆两类仓库
2. 验证发布配置与权限
- 确认build.gradle中publication配置的groupId、artifactId、version三者完全匹配,且已配置源码、javadoc等必要构件(Sonatype要求完整元数据)
- 检查OSSRH凭证(username/password)是否有效,无过期或权限变更;确认groupId已通过Sonatype审批
3. 清理缓存并重新构建
- 执行命令:
./gradlew clean build --refresh-dependencies,清理本地Gradle缓存并重新同步依赖 - 关闭IntelliJ的Gradle离线模式,同步项目后再尝试发布命令
4. 检查Sonatype控制台状态
- 登录Sonatype Nexus控制台,查看是否存在未关闭的staging repository,避免版本冲突
- 确认目标版本未在仓库中重复存在
5. 手动校验元数据
- 执行
./gradlew generateMetadataFileForMavenJavaPublication后,查看build/publications/mavenJava目录下的maven-metadata.xml,确认格式正确、无语法错误 - 尝试手动上传元数据文件至OSSRH,排查是否为Gradle上传逻辑问题
内容的提问来源于stack exchange,提问作者Joshua Spinak
相关产品推荐
相关产品推荐

