8

考虑我有一个 maven 插件项目,我想将它发布到 Github 的名为“Github Packages”的公共 maven 存储库。我已经按照说明完成了所有工作,对于正常项目,一切都可以开箱即用。但是对于带有 packaging=maven-plugin 的 maven 插件项目,该指令不起作用。

在构建日志中,我看到如下内容:

[警告] 无法从/到 github 传输元数据 repo-name/maven-metadata.xml ( https://maven.pkg.github.com/user-name/repo-name ): 传输文件失败: https:// /maven.pkg.github.com/user-name/repo-name/group-id/maven-metadata.xml。返回码是:422,ReasonPhrase:Unprocessable Entity。

似乎 maven 部署插件在 group-id 的根目录中需要 maven-metadata.xml,但找不到它,也没有人把它放在那里。如何解决这个问题呢?

我使用 Apache Maven 3.3.9,并使用命令:

mvn clean deploy

--添加:我正在使用的 pom 文件示例:

<?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>

<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 my_repo Apache Maven Packages</name>
        <url>https://maven.pkg.github.com/my_nick/my_repo</url>
    </repository>
</repositories>

<version>1.0.0</version>
<groupId>x</groupId>
<artifactId>some-plugin</artifactId>
<packaging>maven-plugin</packaging>

<dependencies>
    <dependency>
        <groupId>x</groupId>
        <artifactId>my-dependency</artifactId>
        <version>1.0.0</version>
    </dependency>

    <dependency>
        <groupId>com.github.javaparser</groupId>
        <artifactId>javaparser-core</artifactId>
        <version>3.15.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>3.6.3</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.6.0</version>
        </plugin>
    </plugins>
</build>
</project>
4

4 回答 4

1

不幸的是,我还没有找到我的问题的正确答案,目前似乎不可能将 Maven 插件添加到 Github 包中。

但是我发现了一种使用 S3 作为存储库后端的解决方法,因此您不需要像 Nexus 或 JFrog 这样的重量级解决方案。你可以阅读这个这个关于如何做的。

于 2020-09-01T08:03:07.947 回答
0

如果您已经将工件上传到 GitHub Packages,那么这意味着您已经正确配置了所有内容。

我想 422 错误的真正原因是您正在尝试使用已上传的相同版本上传相同的工件。如果它不是SNAPSHOT版本,则存储库应拒绝替换它,以使其行为正确。

尝试重新部署已部署的包时出现相同的错误:

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project MavenPluginForGithub: 
Failed to deploy artifacts: Could not transfer artifact ru.dmochalov:SampleMavenPluginForGithub:jar:1.0.3 from/to github (https://maven.pkg.github.com/dmochalov/hello-world): 
Failed to transfer file: https://maven.pkg.github.com/dmochalov/hello-world/ru/dmochalov/SampleMavenPluginForGithub/1.0.3/SampleMavenPluginForGithub-1.0.3.jar. 
Return code is: 422, ReasonPhrase: Unprocessable Entity. -> [Help 1]

怎么修?

假设您有两个选择:

  1. 将插件的版本<version>1.0.0</version>从 1.0.0 增加到 1.0.1。如果插件不稳定且正在开发中,请考虑使用1.0.1-SNAPSHOT版本。GitHub 允许使用 SNAPSHOT 版本重新部署工件。因此,您可以在开发时随时重新部署它。
  2. 从 repo 中删除包。您只能对私有存储库中的包执行此操作。

422 错误与 401 错误

我认为错误代码没有公认的规范或标准化,并且不同的存储库的行为不同。例如,Maven 中央存储库 在尝试替换已部署的版本时回复401 错误。为什么 GitHub 决定使用 422 是一个谜。社区论坛中有答案,但没有适当的解释。

于 2020-05-01T18:01:52.173 回答
0

422 from server: Unprocessable Entity将Maven 工件从 GitHub Actions 发布到 GitHub Packages 时,我遇到了同样的问题。原因是上传的工件对应的标签还不存在。

在这种情况下,错误消息可能会更好。

于 2020-10-12T14:29:23.820 回答
-2

这是关于如何做到这一点的官方 github 链接。但是,由于这似乎没有太大帮助,这里有一个gradle 论坛问题的链接,应该可以帮助您解决这个问题。祝你好运!

于 2020-04-27T20:25:26.667 回答