考虑一下,我有一个maven插件项目,我想将其发布到Github的公共Maven存储库“ Github软件包”中。我已经完成了的所有工作,对于普通项目,一切正常可用。但是,对于带有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>
答案 0 :(得分:1)
不幸的是,我还没有找到正确的答案,看来目前无法将Maven插件添加到Github软件包中。
但是,我找到了一种使用S3作为存储库后端的解决方法,因此您不需要像Nexus或JFrog这样的重量级解决方案。您可以阅读this和this上的操作方法。
答案 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]
假设您有两个选择:
<version>1.0.0</version>
版本从1.0.0增加到1.0.1。如果插件不稳定且正在开发中,请考虑使用1.0.1-SNAPSHOT版本。 GitHub允许使用SNAPSHOT版本重新部署工件。因此您在开发时总是可以重新部署它。我认为错误代码没有被接受的规范或标准化,并且不同的存储库的行为也不同。例如,当尝试替换已经部署的版本时,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的链接,该链接可以为您提供帮助。祝你好运!