Как загрузить плагин maven в пакеты Github? - PullRequest
6 голосов
/ 10 апреля 2020

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

В журнале сборки я вижу что-то вроде этого:

[ПРЕДУПРЕЖДЕНИЕ] Не удалось перенести метаданные repo-name / maven-metadata. xml из / в github ( 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 нужны метаданные maven. xml в идентификаторе группы root, но он не может найти его и никто не кладет это туда. Как решить эту проблему?

Я использую 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>

Ответы [ 2 ]

0 голосов
/ 01 мая 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. Удалить пакет из репозитория. Вы можете сделать это только для пакетов в приватном репозитории .

442 ошибка против ошибки 401

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

0 голосов
/ 27 апреля 2020

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

...