Maven项目GitHub Actions构建遇401未授权错误,求解决方案
解决GitHub Actions中Maven拉取GitHub Packages私有包的401认证问题
遇到这个401错误是因为GitHub Actions环境里没有配置访问GitHub私有包的认证信息,本地的.m2/settings.xml配置没法直接复用,得在工作流里补上认证配置,下面是两种可行的解决方法:
1. 准备GitHub访问令牌
首先得生成一个带read:packages权限的Personal Access Token(PAT),这个权限足够拉取私有包了。生成后把它存到你的GitHub仓库Secrets里,命名为GITHUB_PACKAGES_TOKEN(名字可以自己定,后面要对应上)。
2. 配置工作流里的Maven认证
方法一:用setup-java自动配置(推荐)
直接修改工作流里的JDK配置步骤,加上服务器认证参数,setup-java会自动帮你生成对应的Maven settings配置:
- name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' cache: maven server-id: github # 这个ID要和你pom.xml里仓库的ID一致 server-password: ${{ secrets.GITHUB_PACKAGES_TOKEN }} # 引用刚才存的Secret
同时确认你的pom.xml里已经配置了GitHub Packages仓库,并且ID和上面的server-id匹配:
<repositories> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/你的GitHub用户名/私有包仓库名</url> </repository> </repositories>
方法二:手动生成settings.xml
如果需要更灵活的配置,可以在工作流里手动创建.m2/settings.xml文件:
- name: 配置Maven settings run: | mkdir -p ~/.m2 cat > ~/.m2/settings.xml << EOF <settings> <servers> <server> <id>github</id> <username>你的GitHub用户名</username> <password>${{ secrets.GITHUB_PACKAGES_TOKEN }}</password> </server> </servers> </settings> EOF
这样Maven执行命令时会自动读取这个配置文件,不需要额外加参数。
完整工作流示例
name: Java CI with Maven on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' cache: maven server-id: github server-password: ${{ secrets.GITHUB_PACKAGES_TOKEN }} - name: Build with Maven run: mvn -B package --file pom.xml
注意事项
- PAT只需要
read:packages权限,别给多余权限,避免安全风险 - 仓库Secrets的名字要和工作流里引用的完全一致
- pom.xml里的仓库ID必须和settings配置里的server ID对应,否则认证不生效
内容的提问来源于stack exchange,提问作者get_php_workin
相关产品推荐
相关产品推荐

