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.