向AWS CodeArtifact发布SNAPSHOT Jar返回400错误请求
AWS CodeArtifact发布SNAPSHOT版本Gradle报400、制品Unfinished问题排查方案
一、检查CodeArtifact仓库类型配置
CodeArtifact的仓库分为快照仓库(Snapshot)和发布仓库(Release),默认创建的仓库是发布仓库,不允许上传SNAPSHOT版本。你需要确认当前使用的仓库配置:
- 登录AWS控制台进入CodeArtifact服务,找到目标仓库查看仓库类型
- 如果是Release类型,要么切换为Snapshot类型,要么单独创建一个快照仓库专门用于SNAPSHOT版本发布
- 注意:同一个仓库无法同时支持快照和正式版,必须分开配置
二、核对Gradle发布配置的仓库地址
快照版本需要指向CodeArtifact的快照仓库地址,正式版对应发布仓库地址。检查你的build.gradle(或build.gradle.kts)配置:
publishing { repositories { maven { url = uri("https://<domain>-<accountId>.d.codeartifact.<region>.amazonaws.com/maven/<snapshot-repo-name>/") credentials { username = awsAccessKeyId password = awsSecretAccessKey } } } publications { mavenJava(MavenPublication) { from components.java } } }
确保url指向的是快照仓库的地址,混用仓库地址会直接导致SNAPSHOT版本上传被拒绝,返回400错误。
三、检查Gradle Maven发布插件版本与配置
旧版本的Gradle Maven发布插件在处理SNAPSHOT元数据时可能存在兼容性问题,建议升级到最新稳定版:
plugins { id 'maven-publish' version '3.1.2' // 使用最新稳定版 id 'java' }
如果有自定义的Maven元数据配置,建议先移除,用默认逻辑测试——自定义配置可能导致元数据格式不符合CodeArtifact要求,进而触发400错误。
四、排查AWS权限配置
检查用于发布的IAM用户/角色是否拥有codeartifact:PutPackageVersion和codeartifact:UploadPackageAsset权限,且权限覆盖快照版本的资源路径:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeartifact:PutPackageVersion", "codeartifact:UploadPackageAsset" ], "Resource": "arn:aws:codeartifact:<region>:<accountId>:package/<domain>/<repo>/maven/<package-name>/1.0.0-SNAPSHOT" } ] }
权限策略如果仅针对正式版路径,会导致SNAPSHOT版本上传被拦截。
五、查看详细日志定位问题
执行Gradle publish任务时添加--info参数,获取完整的请求和响应日志:
./gradlew publish --info
重点关注maven-metadata.xml等元数据文件的上传过程——400错误通常是因为请求不符合CodeArtifact的规范,日志会明确显示具体错误原因,比如元数据格式错误、仓库不支持快照等。
内容的提问来源于stack exchange,提问作者Lucas Favaro
相关产品推荐
相关产品推荐

