我正在为使用github动作工作流将maven项目部署到github包的(貌似)简单的任务而苦苦挣扎。首先,这是我在maven deploy
阶段遇到的错误:
[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]
(信息:我在[括号]中用通用术语代替了不必要的和/或私人的具体信息)
最有可能的是,实际的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提供了一个清单。尽管我无法验证所有内容,但我还是尝试检查所有要点是否对我有用。根据此清单,我没有发现任何问题。
此问题中显示的错误看起来很像我所收到的错误,但建议的解决方案仍然无法解决我的任何问题。
此答案建议使用个人访问令牌代替GITHUB_TOKEN
。我试过了,它什么也没变。
如果有人可以向我展示我案件的确切问题,我当然会很高兴,但是并不需要那么具体。我正在尝试建立最基本的管道,而我目前不希望做更多的事情,而不仅仅是将Maven快照存储库部署到github包(使用github动作)。因此,如果有人可以向我展示如何正确地一般,那也很好。谢谢!
答案 0 :(得分:0)
我自己弄清楚了,但是结果非常不令人满意。这里的主要问题是:
注意:GitHub软件包不支持Apache Maven的SNAPSHOT版本。确保在〜/ .m2 / settings.xml文件中禁用SNAPHOT。
(Source)
因此,似乎GitHub Packages不支持构建maven快照存储库,否则该存储库非常实用。我的计划是建立一个工作流,以在开发发生时在软件包注册表上部署新的SNAPSHOT。 Maven快照存储库不需要唯一的版本号即可部署,这意味着我可以为每次推送构建一个新版本,但是实际的依赖版本保持不变。这样,每个人都可以轻松地尝试我的develop
分支的最新状态,只需在其pom文件中包含固定的快照版本即可。
现在,如何解决我的问题:
由于GitHub软件包不支持快照存储库,因此您必须从pom文件中SNAPSHOT
标记中的值中删除关键字“ project.version
”。基本上,您可以在其中放置所有其他版本说明,但是现在它是唯一的。但是,如果您删除所有SNAPSHOT
关键字,则工作流应将程序包正确部署到GitHub程序包注册表,至少对我有用。
如果有人知道解决此SNAPSHOT
问题的方法,请告诉我。否则,这是我到目前为止找到的唯一可行的解决方案。