考虑到我有一个maven插件项目,我想把它发布到Github的公共maven仓库,名为 "Github包"。我已经做了所有的事情,通过 指令 对于普通项目来说,一切都能正常工作,但对于包装为maven-plugin的maven插件项目来说,这个指令就不行了。但是对于包装为maven-plugin的maven插件项目,这个指令就不能用了。
在构建日志中,我看到了这样的内容:"[WARNING]Could not transfer metadata repo-namem-tem"。
[WARNING] Could not transfer metadata repo-namemaven-metadata.xml from to github(https:/maven.pkg.github.comuser-namerepo-name。): 传输文件失败。 https:/maven.pkg.github.comuser-namerepo-namegroup-idmaven-metadata.xml。. 返回代码是:422 , ReasonPhrase:Unprocessable Entity: 422 , ReasonPhrase:Unprocessable Entity.
好像maven部署插件需要maven-metadata.xml在group-id的根目录下,但是找不到,也没人放在那里。如何解决这个问题?
我用的是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>
如果你已经将工件上传到了GitHub Packages,那么说明你已经配置好了一切。
我想422错误的真正原因是,你试图上传相同的工件与 同版 已经上传的。如果它不是一个 快照 版本,那么版本库应该拒绝替换它,这样它才会表现正确。
当我试图重新部署已经部署的包时,也得到了同样的错误。
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中央仓库的回复为 401错误 当试图替换已经部署的版本时,为什么GitHub决定使用422是一个谜。有一个 回答 在社区论坛,但没有适当的解释。
这里是 官方github链接 如何做到这一点。然而,由于这似乎没有什么帮助,这里有一个链接到一个 gradle论坛问题 应该能帮你解决这个问题. 祝你好运!