java - 尝试使用 github 操作 (maven) 部署到 github 包时出现错误代码 400

标签 java maven github repository pipeline

我正在努力完成使用 github actions 工作流程将 Maven 项目部署到 github 包的(看似)简单的任务。首先,这是我在 Maven 部署阶段遇到的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project [project name]: Failed to retrieve remote metadata [groupId]:[artifactId]:1.0-SNAPSHOT/maven-metadata.xml: Could not transfer metadata [groupId]:[artifactId]:1.0-SNAPSHOT/maven-metadata.xml from/to github (https://maven.pkg.github.com/[username]/[repository]): Failed to transfer file https://maven.pkg.github.com/[username]/[repository]/[groupId as path]/[artifactId]/1.0-SNAPSHOT/maven-metadata.xml with status code 400 -> [Help 1]

(信息:我用[括号]中的通用术语替换了不必要的和/或私有(private)的具体信息)

最有可能的是,实际的 maven-metadata.xml 文件不是问题,因为我之前已经看到过类似“无法上传校验和”且状态为 400 的警告。我猜想 maven-metadata.xml 只是它失败的第一个文件,但可能我的这个假设完全错误,请告诉我是否是这样。

可能最重要的文件是工作流程 yaml 文件:

name: Deploy SNAPSHOT (develop)

on:
  push:
    branches:
      - develop

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Maven Deploy
        env:
          GITHUB_USERNAME: x-access-token
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: mvn --settings settings.xml -B -e -Dmaven.wagon.http.pool=false clean deploy

同样非常重要:maven settings.xml 文件:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <activeProfiles>
        <activeProfile>github-packages</activeProfile>
    </activeProfiles>

    <profiles>
        <profile>
            <id>github-packages</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>https://repo1.maven.org/maven2/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>github</id>
                    <name>GitHub [username] Apache Maven Packages</name>
                    <url>https://maven.pkg.github.com/[username]</url>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <servers>
        <server>
            <id>github</id>
            <username>${env.GITHUB_USERNAME}</username>
            <password>${env.GITHUB_TOKEN}</password>
        </server>
    </servers>
</settings>

(信息:括号中的值与之前相同)

最后,我的 Maven 项目的父 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>[groupId]</groupId>
    <artifactId>[artifactId]</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        [child modules]
    </modules>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.release>11</maven.compiler.release>
    </properties>

    <dependencies>
        [my dependencies]
    </dependencies>

    <distributionManagement>
        <repository>
            <id>github</id>
            <name>GitHub [username] Apache Maven Packages</name>
            <url>https://maven.pkg.github.com/[username]/[repository]</url>
        </repository>
    </distributionManagement>


</project>

也许同样重要的是,GitHub 存储库完全属于我,因此我应该拥有它的所有管理权限。

我尝试过的事情:

我现在已经做了一些研究,发现我的问题似乎并不罕见。不过,从我迄今为止找到的所有解决方案来看,没有一个有效。

  1. Official GitHub documentation for setting up workflows

首先,我使用此网站作为引用。

  • This StackOverflow Question
  • 我基本上坚持在这个问题及其答案中找到的所有建议。

  • This other StackOverflow Question about nexus deploys
  • accepted answer这个问题提供了一个 list 。我尝试检查所有要点是否对我有用,尽管我无法验证所有内容。根据此 list ,我没有发现任何问题。

  • This question on the GitHub community forum
  • 此问题中显示的错误看起来非常类似于我遇到的错误,但建议的解决方案仍然没有为我解决任何问题。

  • This Answer on a similar GitHub community forum question
  • 此答案建议使用个人访问 token 而不是 GITHUB_TOKEN。我尝试过,但没有任何改变。

    我需要什么

    当然,如果有人可以告诉我我的案件的确切问题是什么,我会很高兴,但不需要那么具体。我正在尝试建立尽可能最基本的管道,目前我只想将 Maven 快照存储库部署到 github 包(使用 github 操作)。因此,如果有人可以向我展示如何正确地执行此操作一般,那也很好。谢谢!

    最佳答案

    我自己也想了一下,但是结果很不理想。这里的主要问题是:

    Note: GitHub Packages does not support SNAPSHOT versions of Apache Maven. Make sure you disable SNAPHOT in your ~/.m2/settings.xml file.

    ( Source )

    所以,GitHub Packages 似乎不支持 Maven 快照存储库的构造,否则这是非常实用的。我的计划是建立一个工作流程,当发生推送开发时,在包注册表上部署新的快照。 Maven 快照存储库不需要唯一的版本号进行部署,这意味着我可以为每次推送构建一个新版本,但实际的依赖版本保持固定。然后,每个人都可以轻松尝试我的 develop 分支的最新状态,只需将修复的快照版本包含在他们的 pom 文件中即可。

    现在,如何解决我的问题:

    由于 GitHub 包不支持快照存储库,因此您必须从 pom 文件的 project.version 标记的值中删除关键字“SNAPSHOT”。基本上你可以把所有其他版本的描述放在那里,但现在它是独一无二的。但是,如果您删除所有 SNAPSHOT 关键字,工作流程应该正确地将包部署到 GitHub 包注册表,至少它对我有用。

    如果有人知道解决此 SNAPSHOT 问题的方法,请告诉我。否则,这是我迄今为止找到的唯一可行的解​​决方案。

    关于java - 尝试使用 github 操作 (maven) 部署到 github 包时出现错误代码 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59147676/

    相关文章:

    java - Maven安装时编译错误

    java - 带有 minimizeJar 的 Maven Shade 插件

    java - Maven 无法识别 Swagger 依赖项

    java - 线程队列使用什么设计模式

    java - 如何用JAVA获取 Crystal 报表参数名称

    java - 如何将内容写入文件

    git - 相对提交引用

    github - bower ECMDERR 无法执行 "git ls-remote --tags --heads > git@github.om:mobify/bellows.git",退出代码为 #128

    Github for Windows 将 repo 置于 "rebasing"状态,但显示为 "failed to sync this branch"

    没有 IDE JSONObject 的 JAVA