如何将Maven插件上传到Github软件包中?

时间:2020-04-10 08:51:56

标签: java maven maven-plugin maven-deploy-plugin github-package-registry

考虑一下,我有一个maven插件项目,我想将其发布到Github的公共Maven存储库“ Github软件包”中。我已经完成了enter image description here的所有工作,对于普通项目,一切正常可用。但是,对于带有Packaging = maven-plugin的Maven插件项目,该指令不起作用。

在构建日志中,我看到这样的内容:

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

看来,maven部署插件在组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 个答案:

答案 0 :(得分:1)

不幸的是,我还没有找到正确的答案,看来目前无法将Maven插件添加到Github软件包中。

但是,我找到了一种使用S3作为存储库后端的解决方法,因此您不需要像Nexus或JFrog这样的重量级解决方案。您可以阅读thisthis上的操作方法。

答案 1 :(得分:0)

如果您已经将工件上传到GitHub软件包,则意味着您已正确配置了一切。

我认为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. 从仓库中删除软件包。您只能对私有repository中的软件包执行此操作。

422错误与401错误

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

这是 official github link 的确切说明方法。但是,由于这似乎没有多大帮助,因此,这里有一个指向 gradle forum question的链接,该链接可以为您提供帮助。祝你好运!