Действия GitHub Ошибка сборки Maven с ошибкой «относительного пути» после обновления динамической версии

Я работаю над проектом, в котором мы используем GitHub Actions для автоматизации процесса сборки Maven. Мы динамически устанавливаем номер версии в формате projectversion-runID-runNumber, например 8.1.0-9761957358-18. Мы включаем этот runID в версию сборки, чтобы рабочий процесс развертывания мог проанализировать его и загрузить артефакты из рабочего процесса сборки.

В нашем рабочем процессе сборки мы используем mvnversions:set для обновления версий. Однако команда завершается с ошибкой «относительного пути» специально для подмодулей, которые ссылаются на poms модуля как на родительских с помощью ../../pom.xml. Файлы pom этих модулей, которые ссылаются на родительский pom с помощью ../pom.xml, похоже, не имеют проблем. Вот подробности:

Сообщение об ошибке:

[ERROR] Child module ... of ... cannot be found in the workspace
[ERROR] The POM for ... is missing, no dependency information available
[FATAL] Non-resolvable parent POM for com.example.project.submodule: Could not find artifact com.example.project:module:pom:8.1.0-9761957358-18 in central (https://repo1.maven.org/maven2) and 'parent.relativePath' points at wrong local POM

Структура файла:

project-root/
│
├── pom.xml
├── module1/
│   ├── pom.xml
│   └── modules/
│       ├── submodule1/
│       │   └── pom.xml
│       ├── submodule2/
│       │   └── pom.xml

Шаги рабочего процесса:

name: Build and Publish

on:
  push:
    paths-ignore: ['.github/**']
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4

      - name: Set Up JDK 11
        uses: actions/setup-java@v4
        with:
          java-version: 11
          distribution: 'temurin'
          cache: maven

      - name: Set Version
        run: |
          mvn versions:set -DnewVersion=8.1.0-${{ github.run_id }}-${{ github.run_number }} -DgenerateBackupPoms=false

Я проверил, что файлы POM существуют в локальном репозитории, который, по моему мнению, является первым местом, куда смотрит Maven. Мы включаем runID в версию сборки, чтобы можно было проанализировать идентификатор запуска из тега, который мы создаем на его основе. Это позволяет GitHub развертывать артефакты загрузки рабочего процесса, созданные в ходе рабочего процесса сборки.

Примеры файлов POM:

Родительский POM (pom.xml):

<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>
  <groupId>com.example.project</groupId>
  <artifactId>parent-project</artifactId>
  <version>8.1.0</version>
  <packaging>pom</packaging>
  <modules>
    <module>module1</module>
  </modules>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>
Module POM (module1/pom.xml):
<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">
  <parent>
    <artifactId>parent-project</artifactId>
    <groupId>com.example.project</groupId>
    <version>8.1.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.project.module1</groupId>
  <artifactId>module1</artifactId>
  <packaging>pom</packaging>
  <modules>
    <module>modules/submodule1</module>
  </modules>
</project>
Submodule POM (module1/modules/submodule1/pom.xml):
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>module1</artifactId>
    <groupId>com.example.project.module1</groupId>
    <version>8.1.0</version>
    <relativePath>../../pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.project.module1</groupId>
  <artifactId>submodule1</artifactId>
  <packaging>jar</packaging>
</project>

Вещи, которые я пробовал:

  • Замена командыversions:set на mvn dependency:tree и столкнулся с той же ошибкой «относительного пути».
  • Добавление rm -rf локального репозитория maven github action runner, в убедитесь, что кеш maven очищен, и это не помогло.
  • Удаление runID из номеров версий сборки. Та же проблема.
  • Индивидуальная установка всех помпов явно, с mvn install -N для каждого модуля. Никаких кубиков.
  • Дважды проверил, что идентификаторы групп и артефактов, а также версии, перечисленные в родительские разделы соответствовали тому, что было в родительском pom.xml, на который ссылаются.
  • Раньше этот рабочий процесс как-то выполнялся, но потом кто-то выполнил слияние. день, и все сборки начали терпеть неудачу. Мне интересно, если это возможно, имел доступ к чему-то кэшированному, но не знал как.
  • Создание кода из коммита перед слиянием привел к той же ошибке.
  • Сборка кода локально на виртуальной машине Windows 10 с использованием сценария оболочки, который использует тот же репозиторий и файлы pom, работает.
  • Мы воспроизвели ошибку, защитив один из pom-файлов от записи, установив версии, затем сняв защиту от записи и попытавшись установить их снова. Возможно, это каким-то образом происходит на ранних этапах сборки, но не знаю, как устранить неполадки, если это происходит.

Будем очень признательны за любые идеи о том, как решить эту проблему!

Простой вопрос: зачем использовать relativePath>../../.., чтобы соответствующим образом изменить структуру вашего проекта? Просто сделайте pom.xml на уровне modules/ и, кроме того, в своем project-root создайте pom.xml, который является родительским для нижележащих модулей, и не пытайтесь изменить имя parent-pom.xml или одинаково... Есть ссылка на проект?

khmarbaise 03.07.2024 10:06

@khmarbaise Извините, это была ошибка, связанная с Copilot... в реальном проекте это pom.xml, а не родительский-pom.xml... Я не могу дать ссылку на реальный проект, поскольку он является собственностью. Постараюсь разместить соответствующую информацию.

sdanzig 03.07.2024 13:58

Относительный путь типа этого: ` <relativePath>../../pom.xml</relativePath>` не имеет смысла... создайте pom подуровня, который вернет вас к настройкам по умолчанию... чтобы вы могли опустить relativePath также <module>modules/submodule1</module> зачем нужен каталог modules? если вам это нравится... просто сделайте помпу на уровне modules ... и вы можете определить его как <module>modules</modules>... Пример многомодульной сборки с несколькими уровнями: github.com/khmarbaise/rpn-calculator

khmarbaise 03.07.2024 16:27

@khmarbaise Спасибо за ваш вклад. Я понимаю, что <relativePath> по умолчанию имеет значение ../pom.xml, и если родительский pom присутствует, вы можете опустить относительный путь, но если вы не можете изменить местоположение родительского pom с помощью чего-то вроде ../.. /pom.xml (с учетом дополнительного каталога «модулей»), какова цель относительного пути? Я могу попробовать добавить туда файлы pom третьего уровня, но я не уверен, что это необходимо.

sdanzig 03.07.2024 16:47

Вопрос не в том, необходимо ли это, а в том, легче ли с этим справиться... другой вопрос в том, почему у вас есть этот дополнительный каталог между ними, который, как следствие, не имеет смысла...?

khmarbaise 03.07.2024 19:00

@khmarbaise Пытаюсь получить существующую устаревшую кодовую базу с помощью действий github. Раньше строился нормально, как и Bamboo. Я не хочу менять его структуру без необходимости.

sdanzig 03.07.2024 20:24

Полезно ли это chatgpt.com/share/aeb1e174-452a-4b82-8f02-b2eec83b5eb7 ?

oOosys 05.07.2024 09:52

@oOosys Определенно уже пробовал ChatGPT... проверка mvn была новой, но она терпит неудачу с той же ошибкой, что и попытка установить версию или просмотреть дерево зависимостей.

sdanzig 05.07.2024 17:33

@sdanzig: иногда вам нужно задать вопрос с другой точки зрения или попросить дополнительную информацию. Вчера в качестве ответа я получил чушь-код... поэтому я изменил вопрос с запроса перевода с кода черепахи на svg-изображение холста и запросил код Python с помощью модуля svgwrite... В результате я получил действительный и написанный код. правильный код изображения SVG (который ИИ мог запустить сам, чтобы получить код SVG в качестве перевода, но не сделал этого). Это некоторая работа... но часто вы приходите к решению быстрее, чем спрашиваете где-то еще.

oOosys 05.07.2024 19:44

@sdanzig: Недавно у меня был вопрос о награде на 500 в stackoverflow... и много, много ответов... наконец, я попросил ИИ предоставить дополнительную информацию о коде, а также о том, что и как он работает. Я пришел к тому, чего не смог получить правильную и не вводящую в заблуждение помощь, несмотря на награду.

oOosys 05.07.2024 19:51
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
1
10
123
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понял, что происходит не так.

Родительский модуль на самом деле является подкаталогом в репозитории git. Нам нужен был pom.xml в корне этого репозитория только для поддержания актуальности графа зависимостей, чтобы Dependabot мог работать. Все, что это было, — это минимальный pom-файл агрегатора, который просто указывал на подмодули, включая родительский модуль, упомянутый в этом посте. Однако pom-агрегатор корневого уровня не предназначался для использования в сборке.

Шагом ранее в рабочем процессе была установка версий в другом «родительском проекте». В конце концов мы заметили, что когда версии этого проекта устанавливались, он сначала искал «корень локального агрегатора», находил pom, который мы не собирались использовать, и через него находил другие родительские проекты, устанавливая версии и в них. К тому времени, когда он попытался установить версии в других родительских проектах, версии уже не были такими, как ожидалось.

mvnversions:set, однако, имеет этот параметрprocessFromLocalAggregationRoot, который по умолчанию имеет значение true. Итак, я вошел в рабочий процесс и добавил

-DprocessFromLocalAggregationRoot=false

для всех вариантов использования версий mvn: set

Это исправило ситуацию и позволило нам сохранить pom-файл для Dependabot.

Рад видеть, что вы это поняли... Целью моих комментариев было показать вам, как самостоятельно прийти к решению. Обсуждение вещей с «глупым» ИИ часто может иметь «эффект горничной», когда вы находите решение, объясняя проблему в простой и понятной форме кому-то другому. Другими словами, я рассматриваю ваш ответ как подтверждение того, что награды имеют очень ограниченную ценность...

oOosys 05.07.2024 23:24

Другие вопросы по теме

Как сохранить вывод сценария Python в действиях GitHub, запущенных в последней версии Windows?
Невозможно найти актив в /home/runner/CDK_Test/frontend/frontendapp/build при запуске развертывания CDK на GitHub. Действие
Загрузка папки из облачного хранилища в действии GitHub и перемещение ее внутри докер-контейнера не работает
Ошибка google-github-actions/get-gke-credentials: требуются разрешения "container.clusters.get"
Как протестировать приложение Kivy на GitHub Actions MacOS Runner?
Невозможно найти версию dotnet при развертывании приложения функции гибкого потребления с помощью действий GitHub
Невозможно выполнять команды git удаленно из скрипта
AWS: отмена регистрации нездоровых IP-адресов из зарегистрированных целей (целевая группа) с помощью рабочего процесса действий GitHub не работает
Как пометить и пометить изображение с помощью CLI docker Compose в файле рабочих процессов GitHubPublish.yaml?
Ошибка при оценке «стратегии» для задания – Действия GitHub