GCP Artifact Registry导入Gradle版本目录时artifactregistry协议不被支持
解决Gradle版本目录与GCP Artifact Registry兼容问题
问题根源是Gradle版本目录的解析逻辑不支持artifactregistry://自定义协议,仅识别官方列出的http/https等协议,而常规插件/制品的发布拉取依赖Artifact Registry插件对该协议的特殊处理,版本目录解析未适配这一逻辑。以下是两种可行解决方法:
方法一:统一使用HTTPS协议配置仓库
将GCP Artifact Registry的仓库地址替换为HTTPS格式,同时配置对应认证,让版本目录和普通制品共用同一仓库配置:
- 在
settings.gradle的dependencyResolutionManagement块中统一配置仓库:
dependencyResolutionManagement { repositories { maven { url = uri("https://us-maven.pkg.dev/my-project") credentials { // 本地开发可使用gcloud默认凭据 username = "oauth2accesstoken" password = providers.exec { commandLine("gcloud", "auth", "print-access-token") }.standardOutput.asText.get().trim() // CI环境建议使用服务账号密钥 // username = "_json_key" // password = file("/path/to/service-account-key.json").text } } mavenCentral() } versionCatalogs { libs { from("com.my.stuff:my-catalog:0.0.1") } } }
- 确保Artifact Registry插件已在
settings.gradle中应用(不影响HTTPS配置,仅用于常规制品的发布/拉取):
plugins { id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" }
方法二:在版本目录引用中直接指定HTTPS仓库
如果不想全局修改仓库配置,可单独为版本目录指定HTTPS仓库地址及认证:
versionCatalogs { libs { from("com.my.stuff:my-catalog:0.0.1") { repository { url = uri("https://us-maven.pkg.dev/my-project") credentials { username = "oauth2accesstoken" password = providers.exec { commandLine("gcloud", "auth", "print-access-token") }.standardOutput.asText.get().trim() } } } } }
关键注意事项
- 确保当前GCP账号拥有Artifact Registry的
roles/artifactregistry.reader权限; - 本地开发前需执行
gcloud auth application-default login获取有效凭据; - CI环境优先使用服务账号密钥,避免依赖本地登录状态。
内容的提问来源于stack exchange,提问作者Ebad
相关产品推荐
相关产品推荐

