Android Studio构建拉取Maven依赖报403 Forbidden错误如何解决
问题原因
返回403禁止访问的核心原因是私有Maven仓库的认证流程完全没有生效,具体由3个配置错误共同导致:
- Artifact Registry Gradle插件配置位置错误:将插件声明放在模块级build.gradle的plugins块中,但根buildscript的依赖中没有引入该插件的classpath,插件无法正常初始化,Gradle会直接发起普通无认证的HTTP请求拉取依赖,自然被私有仓库拒绝。
- 仓库配置位置错误:仅在模块级build.gradle中配置了Artifact Registry仓库地址,没有加入全局仓库配置,依赖解析时无法匹配到插件提供的认证逻辑。
- 本地缺少对应仓库的访问凭证:就算插件正常加载,没有配置有权限的账号认证信息,依然会被仓库拦截返回403。
修复步骤
按以下顺序调整配置即可解决问题:
- 配置本地访问凭证
先安装Google Cloud CLI,执行以下命令登录拥有gmp-artifacts/transportation仓库读取权限的Google账号:
如果是CI/CD环境,配置环境变量gcloud auth application-default loginGOOGLE_APPLICATION_CREDENTIALS指向有权限的服务账号JSON密钥文件路径即可。执行完登录后可以跑gcloud components update更新组件,避免高版本JDK下的认证兼容问题。 - 修正根目录build.gradle配置
在buildscript依赖中加入Artifact Registry插件的classpath,同时把私有仓库地址加入全局allprojects的仓库列表,修正后的完整配置如下:buildscript { ext.kotlinVersion = "1.6.21" repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.0.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1" // 新增Artifact Registry插件依赖 classpath "com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.1.5" } } allprojects { repositories { google() mavenCentral() // 新增私有Artifact Registry仓库配置 maven { url "artifactregistry://us-west2-maven.pkg.dev/gmp-artifacts/transportation" } } } - 修正模块级build.gradle配置
删除plugins块中错误声明的Artifact Registry插件,避免版本冲突,直接通过apply方式加载插件即可,同时删除模块内重复配置的repositories块(全局已经配置过,不需要重复写),修正后的配置片段如下:plugins { id 'com.android.application' id 'kotlin-android' } apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' apply plugin: 'com.google.cloud.artifactregistry.gradle-plugin' // 原有android配置块、dependencies依赖块内容保持不变即可 - 权限校验
注意:如果调整完配置依然返回403,优先检查账号是否被授予了目标仓库的Artifact Registry Reader权限,插件本身不会做权限校验,所有权限校验逻辑在Artifact Registry服务端执行,无仓库权限的情况下即使认证成功也会返回403。
内容的提问来源于stack exchange,提问作者Zeff
相关产品推荐
相关产品推荐

