GitHub Action构建时无法拉取私有Maven包的解决方法
问题描述
我开发了一个供公司多应用共享的Java库,已构建并发布到GitHub私有Maven仓库且发布成功。在应用的Gradle中添加了仓库配置:
... repositories { mavenCentral() maven { url = uri("https://maven.pkg.github.com/<my-organization>/backend-library") credentials { username = project.findProperty("gpr.user") ?: System.getenv("USERNAME") password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") } } } ...
本地构建时已配置好用户名和Token,能成功下载包并完成构建,但推送代码后用GitHub Action构建失败。Workflow配置如下:
... job: env: USERNAME: Username GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} defaults: run: working-directory: ${{ env.WORK_DIR }} steps: - name: Check out repository code uses: actions/checkout@v3 with: path: ${{ env.WORK_DIR }} - name: List files in the repository run: ls -la - name: Set up JDK 17 uses: actions/setup-java@v1 with: java-version: 17 - name: Analyze code run: ./gradlew check - name: Run Unit-tests run: ./gradlew test ...
错误信息:
> Task :plugins:mapping:check UP-TO-DATE > Task :plugins:register-invite:compileJava FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':plugins:register-invite:compileJava'. > Could not resolve all files for configuration ':plugins:register-invite:compileClasspath'. > Could not find <my_org_name>:backend-library:1.6.1. Searched in the following locations: - https://repo.maven.apache.org/maven2/com/<my_org_name>/backend-library/1.6.1/backend-library-1.6.1.pom - https://maven.pkg.github.com/<my_org_name>/backend-library/com/<my_org_name>/backend-library/1.6.1/backend-library-1.6.1.pom Required by: project :plugins:register-invite * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 16s
库确实存在于对应位置,本地构建正常,求解决方法。
解决方案
1. 检查GITHUB_TOKEN的权限
GitHub Actions默认生成的GITHUB_TOKEN仅拥有当前仓库的读写权限,无法访问其他私有仓库。解决方法有两种:
- 使用个人访问令牌(PAT):
- 在GitHub个人设置中生成一个PAT,勾选
read:packages权限(如需发布还需write:packages)。 - 将PAT添加到当前仓库的Secrets中,命名为
GPR_TOKEN。 - 修改Workflow中的环境变量:
env: USERNAME: <你的GitHub用户名> GITHUB_TOKEN: ${{ secrets.GPR_TOKEN }}
- 在GitHub个人设置中生成一个PAT,勾选
- 为默认
GITHUB_TOKEN添加仓库权限:
在Workflow的job中添加permissions配置,授予包读取权限:job: permissions: packages: read env: USERNAME: <你的GitHub用户名> GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 其他配置...
2. 确认环境变量与Gradle配置的匹配
- 确保Workflow中
USERNAME的值是你的GitHub用户名,而非自定义名称。 - 检查Gradle中的环境变量名:如果Gradle里用的是
GITHUB_TOKEN,Workflow中要保持一致;如果Gradle里是gpr.key,也可以把Workflow的环境变量改成GPR_KEY以对应Gradle配置。
3. 验证GitHub Packages仓库URL的正确性
检查Gradle中的仓库URL是否准确:
- URL格式应为
https://maven.pkg.github.com/<组织名>/<仓库名>,确保组织名和仓库名没有拼写错误。 - 确认私有仓库的访问权限:当前用户(或PAT对应的用户)是否拥有该仓库的读取权限。
4. 核对依赖坐标的准确性
错误信息中显示的依赖路径是com/<my_org_name>/backend-library/...,需要确认:
- 发布库时的
groupId是否为com.<my_org_name>,如果不是,要修正应用中的依赖坐标。 - 确认
artifactId和版本号1.6.1与发布到GitHub Packages的完全一致。
5. 清理Gradle缓存(可选)
如果之前的构建缓存了错误的依赖信息,可在Workflow中添加清理缓存的步骤:
- name: Clean Gradle cache run: ./gradlew clean build --no-build-cache
内容的提问来源于stack exchange,提问作者Alex_Crack
相关产品推荐
相关产品推荐

