Maven: нерозв'язний батьківський POM


102

У мене встановлено проект maven як 1 проект оболонки та 4 дочірні модулі. Коли я намагаюся побудувати оболонку. Я отримав:

[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR] The project module1:1.0_A0 (C:\module1\pom.xml) has 1 error
[ERROR] Non-resolvable parent POM: Failure to find shell:pom:1.0_A0 in http://nyhub1.ny.ssmb.com:8081/nexus/content/repositories/JBoss/ was cached in the local repository, resolution will not be reattempted until the update interval of jboss has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 5, column 11 -> [Help 2]

Якщо я намагаюся побудувати самотній модуль, я отримую ту саму помилку, замінюючи лише module1, яким би це не був модуль.

Нехай вони всі посилаються на батьків у своїх помпах.

<parent>
    <artifactId>shell</artifactId>
    <groupId>converter</groupId>
    <version>1.0_A0</version>
</parent>

Ось відповідні частини оболонки пом:

<groupId>converter</groupId>
<artifactId>shell</artifactId>
<version>1.0_A0</version>
<packaging>pom</packaging>
<name>shell</name>


<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>

1
якщо хтось зацікавлений, додаючи <relativePath>..</relativePath>під <parent></parent>працював у мене.
— каптан

2
запустіть цеmvn install -N & mvn install
— Se Song

Відносний шлях для невідповідних проектів не є "рішенням", коли очікуваний параметр у батьківській папці модуля повинен бути доступним.
— Рік О'Ші

У моєму випадку це було через помилку у файлі pom.xml.
— Олексій Кислицин

Всі можливі питання коротко: stackoverflow.com/a/62704660/6172857
— SUMIT Badsara

Відповіді:


94

Тільки для довідки.

Радості Мейвена.

Помістивши відносний шлях модулів до ../pom.xml, це вирішено.

parentЕлемент має relativePathелемент , який потрібно вказати в директорію батька. За замовчуванням..


17
Так. Використання Maven вимагає, щоб ви знали, що робите, спроби та помилки не заведуть вас дуже далеко. З іншого боку, є кілька хороших посилань. Це одне .
— Нікола Мусатті

6
Отже, ви додали це <relativePath>..</relativePath>під <parent></parent>?
— октавіан

Дякую, я якийсь час намагався вирішити проблему. Я пішов відносним шляхом від ../pom.xmlдо ../<parent folder>/pom.xml.
— Маріо Курцвейл

Поміщення <relativePath> не призведе до вирішення проблеми, якщо ви вказуєте на приватне сховище. Шукайте відповідь Томаша Залуського для детального пояснення.
— Gi1ber7,

Я намагаюся розширити свій головний файл pom до іншого (для тестів) у тому ж каталозі (той же проект). Але це не вирішує цю помилку. Будь-яка ідея, як це виправити?
— Praneeth Peiris

39

Це також можна виправити, помістивши правильний settings.xmlфайл у ~/.m2/каталог.


3
Саме це вирішило мою проблему, дякую !!! Але не вклавши його в якийсь каталог, а вказуючи на нього Eclipse у Налаштуваннях - Maven - Налаштування користувача.
— Brain,

Вирішив і мою проблему. Просто переконайтесь, що параметри також правильно налаштовані maven.repo.
— Саран,

21

Альтернативною причиною також може бути батьківський артефакт, що надходить із сховища, до якого недоступний pom.xml, як правило, приватний сховище. Рішенням було забезпечити це сховище в pom.xml:

<repositories>
    <repository>
        <id>internal-repo</id>
        <name>internal repository</name>
        <url>https://my/private/repo</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

У моєму випадку проблема була ще більш складною через Eclipse: сховище було активним лише у спеціальному профілі ( <profiles><profile><id>activate-private-repo</id><repositories>...), а графічний інтерфейс Maven в Eclipse не дозволяв встановити цей профіль за допомогою Ctrl+Alt+Pярлика.

Рішенням було тимчасово оголосити сховище поза профілем (безумовно), запустити Alt+F5проект оновлення Maven, активувати профіль і повернути декларацію сховища назад у профіль. Це скоріше помилка Eclipse, а не помилка Maven.


Така ж ситуація! Приватне репо не додано до пом.
— LoranceChen

4

Нерозв'язний батьківський POM: Це означає, що ви не можете вирішити батьківський репо.

Завантажити в режимі налагодження:

[DEBUG] Reading global settings from **/usr/local/Cellar/maven/3.5.4/libexec/conf/settings.xml**
[DEBUG] **Reading user settings from /Users/username/.m2/settings.xml**
[DEBUG] Reading global toolchains from /usr/local/Cellar/maven/3.5.4/libexec/conf/toolchains.xml
[DEBUG] Reading user toolchains from /Users/username/.m2/toolchains.xml
[DEBUG] Using local repository at /Users/username/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/username/.m2/repository
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:

Оскільки батьківський репо не є частиною maven central. Рішення полягає в тому, щоб вказати setting.xml в ~ m2 /, щоб допомогти отримати батьківський POM. /Users/username/.m2/settings.xml

У цьому XML вам може знадобитися вказати інформацію про сховище.


Дивовижно! Додавання даних про репо в налаштуваннях xml спрацювало. Але чому це не береться з pom xml (до якого додано те саме репо)?
— smilyface

3

Просто додайте, <relativePath />щоб батьки в pom мали виглядати так:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath />
    </parent>

2
Це застосовується лише тоді, коли батьківський перебуває не в тій же структурі директорій, тобто у віддаленому сховищі.
— Ondra Žižka

2

переконайтеся, що у вас є правильні значення в дочірніх POM

GroupId
ArtefactId
Version

Наприклад, у Eclipse ви можете шукати його: Затьмарення: пошук батьківського пом


2

<relativePath>

Якщо ви будуєте під дочірнім проектом, то <relativePath>можете допомогти вам вирішити батьківський пом.

встановити батьківський пом

Але якщо ви будуєте дочірній проект з його папки, <relativePath>це не працює. Ви можете installспочатку ввести батьківський локальний репозиторій, а потім побудувати дочірній проект.


1

Замінити 1.0_A0 на $ {project.version}

Запустити mvn один раз. Це завантажить усі необхідні сховища. Ви можете повернутися до 1.0_A0 після цього кроку.


Це працює, лише якщо необхідний батьківський POM має таку ж версію, як і POM підмодуля. Це не завжди так.
— Gerold Broser

0

У мене була подібна проблема на роботі.

Побудова батьківського проекту без залежності створила файл parent_project.pom у папці .m2.

Потім додайте дочірній модуль у батьківський POM і запустіть Maven build.

<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>

0

Додайте залежність в

pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
</dependency>

0

Я вирішив цю проблему на мені після дуже тривалої спроби, я створив ще один файл з назвою "parent_pom.xml" у каталозі файлів дочірнього модуля в локальному і встав вміст parent_pom.xml, який знаходиться на віддаленому, до новоствореного "parent_pom.xml ". Це спрацювало для мене, і повідомлення про помилку зникло.


0

Всередині тегу відносного шляху зробіть наступне

<relative>{project_name}/pom.xml</relative>

а потім RunAs-> Maven build

У мене це спрацювало.


-2

У мене виникла проблема, що два файли побудови реактора pom.xml мали однаковий артефакт.


У моєму випадку цього батьківського модуля не було в батьківській папці, мені довелося додати дочірній модуль <relativePath>
— ../parent-module-dir
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.