Как узнать, что Maven отправляет на сервер во время развертывания?

Я пытаюсь использовать новый сервер CI действий Github для развертывания пакетов в новой функции пакетов Github. Дела не ладятся.

Я думаю, что все настроено правильно, но я получаю такую ​​ошибку:

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy 
(default-deploy) on project myproject: Failed to deploy artifacts: Could not 
find artifact com.mycompany:myproject:pom:1.5 in github 
(https://maven.pkg.github.com/mycompany/mycompany_repository) -> [Help 1]

Это происходит после успешной загрузки того же помпа:

Uploading to github: https://maven.pkg.github.com/mycompany/mycompany_repository
/com/mycompany/myproject/1.5/myproject-1.5.pom
Progress (1): myproject-1.5.pom (4.1/6.1 kB)
Progress (1): myproject-1.5.pom (6.1 kB)

Итак, мне кажется, что он успешно загружает pom, но затем не может загрузить тот же pom через несколько секунд.

Я запускаю развертывание с включенными переключателями отладки: mvn -X -e deploy, но я не вижу точных http-команд, которые Maven отправляет на сервер.

Как мне отладить это? Есть ли какой-нибудь транспорт Maven / Aether или что-то, что будет регистрировать то, что происходит под прикрытием?


person ccleve    schedule 19.12.2019    source источник


Ответы (5)


На случай, если кто-то еще попадет сюда в поисках решения проблемы публикации OP в github, у меня была аналогичная проблема, и я обнаружил, что URL-адреса, необходимые в settings.xml и pom.xml, несовместимы. В файле settings.xml URL-адрес репо должен иметь вид https://maven.pkg.github.com/myuser/com/mycompany/mypackage, тогда как в файле pom вашего проекта он должен иметь форму https://maven.pkg.github.com/myuser/mypackage. Так, например, ваш файл settings.xml в ~ / .m2 будет выглядеть примерно так:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>github</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>false</enabled></snapshots>
        </repository>
        <repository>
          <id>github</id>
          <name>GitHub Apache Maven Packages</name>
          <url>https://maven.pkg.github.com/myuser/com/mycompany/mypackage</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>false</enabled></snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>github</id>
      <username>myuser</username>
      <password>mypersonalaccesstoken</password>
    </server>
  </servers>
</settings>

В то время как файл pom.xml в корне вашего проекта должен выглядеть так:

<project>
  ...
  <groupId>org.mycompany</groupId>
  <artifactId>mypackage</artifactId>
  <version>1.0.0</version>
  ...
  <distributionManagement>
    <repository>
      <id>github</id>
      <name>GitHub Apache Maven Packages</name>
      <url>https://maven.pkg.github.com/myuser/mypackage</url>
    </repository>
  </distributionManagement>
  ...
</project>

За исключением этой незначительной (но важной) детали, мои шаги были такими же, как и описанные здесь. Это позволило мне опубликовать мой пакет Maven в реестре пакетов github.

person Jason    schedule 21.02.2020
comment
Файл settings.xml используется всеми проектами на вашем компьютере, развернутыми вашим пользователем, так как же он может иметь URL-адрес, специфичный для пакета из определенного проекта? - person Danny Varod; 23.02.2020
comment
Нет смысла ожидать, что вы будете использовать свое личное имя пользователя в файле, который будет зарегистрирован и повторно использован всеми членами команды. - person Sherms; 16.09.2020
comment
@Sherms Возможно, нет, но факт остается фактом: у меня это сработало. По вашему опыту, программное обеспечение всегда работает разумно? - person Jason; 17.09.2020
comment
@Jason - Нет, но Github, очевидно, не ожидает, что пользователи, работающие вместе, как команда, будут связывать данный проект исключительно с их собственной частной учетной записью github. В конце концов мне удалось заставить это работать с именем организации на каждом пути, поэтому на самом деле он работает так, как ожидалось / задокументировано. - person Sherms; 18.09.2020
comment
@Jason - Спасибо за это предложение. Знаете ли вы, существует ли аналогичная проблема и в репозиториях Azure DevOps? Я столкнулся с этой аналогичной проблемой, но структура файла настроек отличается, т.е. не использует профили. ссылка - person Mythbuster; 11.02.2021
comment
@Mythbuster Maven и ADO - совершенно разные животные, и, насколько мне известно, поверх репозитория артефактов ADO не существует слоя совместимости с Maven. Я бы попытался найти ответы на вопросы с тегами ADO. - person Jason; 19.02.2021

Вы можете включить _ 1_ в рабочих процессах.

Просто добавьте секрет:

ACTIONS_RUNNER_DEBUG

И установите значение true

См. аналогичный ответ здесь.

person smac89    schedule 20.12.2019

Я просто потратил 3 часа на отладку, почему руководство на странице у меня не сработало. Если вы следуете размещенному здесь руководству 1.

OWNER - это ваше имя пользователя на github, а REPOSITORY - это, как вы уже догадались, имя репо.

Просто не забудьте использовать строчные буквы как в ВЛАДЕЛЬЦЕ, так и в РЕПОЗИТОРИИ.

person Christoffer Nissen    schedule 28.08.2020

При создании токена персонального доступа убедитесь, что области действия для токена - это области репо: *, а также более очевидные области записи: пакеты и чтение: пакеты (не отключайте области репо)

В противном случае он делает именно это

person svinther    schedule 25.01.2021

Для меня работает следующее решение:

  1. Создайте репозиторий для пакетов, например. maven-packages
  2. Добавьте <server></server> настройки в <servers> в settings.xml: (сделайте это для каждого идентификатора, указанного ниже)
    <server>
        <id>github</id>
        <username>YOUR GITHUB USERNAME</username>
        <password>A GITHUB TOKEN YOU CREATE FOR PUBLISHING PACKAGES</password>
    </server>
  1. НЕ добавляйте <activeProfiles>, <profile> или <repositories> к settings.xml (добавляйте только <server> элементы), поскольку это избыточно для публикации, и я добавляю их в maven.xml потребляющих проектов, поэтому нет необходимости в дублирование.
  2. Добавьте репозиторий в distributionManagement в pom.xml следующим образом:
    <distributionManagement>
        <snapshotRepository>
            <id>github-snapshot</id>
            <name>GitHub snapshot</name>
            <url>https://maven.pkg.github.com/OWNER/maven-packages/</url>
            <uniqueVersion>true</uniqueVersion>
        </snapshotRepository>
        <repository>
            <id>github-release</id>
            <name>GitHub release</name>
            <url>https://maven.pkg.github.com/OWNER/maven-packages/</url>
            <uniqueVersion>false</uniqueVersion>
        </repository>
    </distributionManagement>

Где OWNER - это учетная запись GitHub, в которой находится ваш проект / проекты, а maven-packages - это репозитории, в которых вы хотите опубликовать свои проекты.

Это позволяет использовать выделенный репозиторий для перечисления пакетов вместо публикации пакета каждого проекта в другом (собственном) репозитории, что упрощает использование нескольких пакетов из вашей учетной записи GitHub, поскольку вам нужно только настроить один репозиторий для этих пакетов:

    <repositories>
        <repository>
            <id>github</id>
            <name>GitHub</name>
            <url>https://maven.pkg.github.com/OWNER/maven-packages/</url>
        </repository>
    </repositories>

Примечание: в разделе <servers> вашего settings.xml определите <server> на id, используемый в repositories и distributionManagement, например github-snapshot, github-release, github в приведенных выше примерах.

person Danny Varod    schedule 25.02.2020