Как загрузить плагин maven в пакеты Github?

Предположим, у меня есть проект надстройки maven, и я хочу опубликовать его в общедоступном репозитории maven Github под названием «Github Packages». Я все сделал с помощью инструкция и для нормальных проектов все работает нормально из коробки. Но для проектов плагинов maven с упаковкой = maven-plugin инструкция не работает.

В журнале сборки я вижу примерно следующее:

[ПРЕДУПРЕЖДЕНИЕ] Не удалось передать репо-имя метаданных / maven-metadata.xml из / в github (https://maven.pkg.github.com/user-name/repo-name): не удалось передать файл: https://maven.pkg.github.com/имя-пользователя/имя-репо/идентификатор-группы/maven-metadata.xml. Код возврата: 422, ReasonPhrase: Unprocessable Entity.

Кажется, что плагину развертывания maven нужен 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>

person Kivan    schedule 10.04.2020    source источник
comment
Можете ли вы добавить свой проверенный код pom.xml или github?   -  person Anish B.    schedule 28.04.2020
comment
@AnishB. Я добавил пример своего файла POM   -  person Kivan    schedule 28.04.2020
comment
Спасибо :) Постараюсь решить.   -  person Anish B.    schedule 28.04.2020
comment
Спасибо, будет полезно   -  person Kivan    schedule 28.04.2020
comment
Возможно, но если я не упакую его как плагин maven, кажется, что он не будет работать как плагин maven, если я добавлю его в плагин build- ›plugins-›, поэтому я предполагаю, что этот вариант упаковки является обязательным   -  person Kivan    schedule 28.04.2020
comment
@Kivan, вы не установили ‹distributionManagement› в своем пом. Это намеренно и вы установили его где-то еще или просто забыли включить сюда?   -  person Dmitry.M    schedule 02.05.2020


Ответы (4)


К сожалению, я не нашел правильного ответа на свой вопрос, кажется, что пока невозможно добавить плагины Maven в пакеты Github.

Однако я нашел обходной путь, который использует S3 в качестве серверной части репозитория, поэтому вам не нужны тяжелые решения, такие как Nexus или JFrog. Вы можете прочитать это и this о том, как это сделать.

person Kivan    schedule 01.09.2020

У меня была такая же проблема 422 from server: Unprocessable Entity при публикации артефактов Maven из GitHub Actions в GitHub Packages. Причина заключалась в том, что соответствующий тег для загруженного артефакта еще не существовал.

В этом случае сообщение об ошибке может быть лучше.

person Marcin Stachniuk    schedule 12.10.2020

Если вы уже загрузили артефакт в пакеты 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. Удалите пакет из репо. Вы можете сделать это только для пакетов в закрытом репозиторий.

Ошибка 422 против ошибки 401

Я полагаю, что нет принятой спецификации или стандартизации для кодов ошибок и разные репозитории ведут себя по-разному. Например, репозиторий Maven Central отвечает с ошибкой 401 при попытке заменить уже развернутую версию. Почему GitHub решил использовать 422 - загадка. Существует ответьте на форуме сообщества, но без надлежащего объяснения.

person Dmitry.M    schedule 01.05.2020
comment
Привет, Дмитрий, спасибо за сообщение, но я уверен, что это не так - версии в порядке, я контролирую и обновляю их по мере необходимости, чтобы не возникла проблема, о которой вы упомянули. Как вы можете видеть в моем сообщении, сборка прерывается в файле метаданных, а не в файле JAR, поэтому я думаю, что проблема в другом. - person Kivan; 02.05.2020
comment
Как я уже писал где-то вверху, проблема, насколько я понимаю, заключается в том, что при развертывании плагина maven необходимо получить / поместить что-то в метаданные GROUP ID, а не в файл метаданных артефакта, а именно в корневые метаданные идентификатора группы. Не знаю почему, но кажется, что да. И никто не помещает метаданные в корневой каталог идентификаторов группы, поэтому, когда плагин развертывания maven пытается прочитать его из корневой папки идентификатора группы, он терпит неудачу с этой ошибкой, потому что такого файла нет в репозитории github - person Kivan; 02.05.2020
comment
@Kivan, действительно, извини, что не заметил. Не могли бы вы обновить свой вопрос, указав версию maven и полную команду, которую вы используете для ее развертывания? - person Dmitry.M; 02.05.2020
comment
Добавлена ​​необходимая вам информация - person Kivan; 02.05.2020
comment
У меня такая же ошибка. В моем случае это не плагин, это проект maven. Он загружается, но возвращает ошибку 422. Но поскольку это многомодульный помп, он не переходит к следующему. Пакеты github непригодны для использования в maven? - person Adriano dos Santos Fernandes; 06.07.2020

Вот официальная ссылка на github, чтобы узнать, как именно это сделать. Однако, поскольку это, похоже, не очень помогает, вот ссылка на вопрос на форуме gradle, который должен вам в этом помочь. Удачи!

person cuchufleto    schedule 27.04.2020
comment
Однако я не голосовал против того, что человек пишет там, в моем случае не работает, потому что, как я уже сказал, никто не помещает метаданные в корень идентификатора группы. Я не знаю почему, может быть, потому что плагин maven не работает или github запрещает помещать туда метаданные. В любом случае я добавил пример файла POM, который я использую. - person Kivan; 28.04.2020