我正在努力完成使用 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 存储库完全属于我,因此我应该拥有它的所有管理权限。
我尝试过的事情:
我现在已经做了一些研究,发现我的问题似乎并不罕见。不过,从我迄今为止找到的所有解决方案来看,没有一个有效。
首先,我使用此网站作为引用。
我基本上坚持在这个问题及其答案中找到的所有建议。
accepted answer这个问题提供了一个 list 。我尝试检查所有要点是否对我有用,尽管我无法验证所有内容。根据此 list ,我没有发现任何问题。
此问题中显示的错误看起来非常类似于我遇到的错误,但建议的解决方案仍然没有为我解决任何问题。
此答案建议使用个人访问 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/