You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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):
    1. 在GitHub个人设置中生成一个PAT,勾选read:packages权限(如需发布还需write:packages)。
    2. 将PAT添加到当前仓库的Secrets中,命名为GPR_TOKEN。
    3. 修改Workflow中的环境变量:
      env:
        USERNAME: <你的GitHub用户名>
        GITHUB_TOKEN: ${{ secrets.GPR_TOKEN }}
      
  • 为默认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:58:18