Android Studio中引入GitHub Packages组织公开仓库依赖时出现403 Forbidden错误的求助
Android Studio中引入GitHub Packages组织公开仓库依赖时出现403 Forbidden错误的求助
看起来你遇到的这个403问题确实挺闹心的——明明代码仓库是公开的,外部用户也准备了带read:packages权限的PAT,结果还是拉取不到依赖。我来帮你梳理几个最可能的原因和排查方向:
1. 先检查GitHub Packages的包可见性(最关键!)
这是很多人踩坑的点:代码仓库公开 ≠ 发布的包也公开。即使你的代码仓库设为公开,你上传到GitHub Packages的包可能默认是Internal(仅组织成员可见)或者Private:
- 登录GitHub,进入你的组织的「Packages」页面,找到这个库对应的包
- 查看包的「Visibility」设置,如果不是
Public,改成公开状态 - 注意:包的可见性一旦设为公开就无法改回私有,确认没问题再操作
2. 核对Gradle配置的细节准确性
2.1 仓库URL与包信息的拼写/大小写
GitHub的URL是大小写敏感的,Maven的group/artifact ID虽然理论上不区分大小写,但实际拉取时如果和发布的不一致,可能触发权限拦截:
- 检查
settings.gradle.kts里的仓库URL:https://maven.pkg.github.com/organization_name/repository_name,组织名、仓库名必须和GitHub上的完全一致(包括大小写) - 检查
libs.version.toml里的group、name、version是否和你发布时的完全匹配。比如你发布的groupId是com.yourorg.yourlib,但配置里写的是groupid,这会请求一个不存在的路径,进而返回403(而非预期的404,因为GitHub会对未授权的路径访问返回403)
2.2 认证信息的正确性
外部用户的PAT配置可能存在细节错误:
- 确保PAT确实勾选了
read:packages权限(创建PAT时要在「packages」板块勾选这个权限) - 认证的
username可以是用户的GitHub用户名,或者直接写token(GitHub允许用token作为用户名,密码填PAT),别用邮箱作为username,这会导致认证失败 - 建议让用户用环境变量代替硬编码,避免拼写错误:
maven { url = uri("https://maven.pkg.github.com/organization_name/repository_name") credentials { username = System.getenv("GITHUB_USER") password = System.getenv("GITHUB_TOKEN") } }
3. 排查组织级的GitHub Packages限制
有些组织会设置额外的权限规则:
- 进入组织的「Settings > Packages」页面,查看是否有「Restrict package access」之类的设置,是否禁止了外部用户拉取公开包
- 检查组织的「Settings > Member privileges」,确认没有对Packages的全局访问限制
4. 测试匿名拉取(快速验证)
如果包确实设为公开,理论上可以尝试匿名拉取,快速定位问题:
- 让外部用户暂时注释掉
credentials块,直接拉取依赖 - 如果匿名能成功,说明之前的PAT配置有问题;如果还是403,那肯定是包的可见性或组织设置的问题
5. 确认你发布时的配置正确性
最后再核对下你自己发布时的Gradle配置:
- 发布时的Maven仓库URL必须是仓库级的(
https://maven.pkg.github.com/organization_name/repository_name),而不是组织级的(https://maven.pkg.github.com/organization_name) - 发布时的
groupId、artifactId、version必须和外部用户引用的完全一致
你可以先从「包可见性」这个点开始排查,这是最常见的原因。如果还是不行,让外部用户把./gradlew build --info的完整日志发出来,能看到更详细的认证和请求细节,方便进一步定位。
内容来源于stack exchange
相关产品推荐
相关产品推荐

