Maven: неразрешимый родительский POM

103

У меня мой проект 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]

Если я пытаюсь создать одинокий модуль, я получаю ту же ошибку, только заменяю модуль1, каким бы модулем он ни был.

Пусть все они ссылаются на родителей в своих пометках.

<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>сработало для меня.
kaptan
2
запустить этоmvn install -N & mvn install
Се Сон
Относительный путь для несоответствующих проектов не является «решением», когда ожидается, что pom в родительской папке модуля должен быть доступен.
Рик О'Ши
В моем случае это произошло из-за опечатки в файле pom.xml.
Алексей Кислицын
Обобщены

Ответы:

95

Просто для справки.

Радости Maven.

Помещение относительного пути модулей в ../pom.xml решило эту проблему.

В parentэлементе есть relativePathэлемент, который необходимо указать на каталог родительского элемента. По умолчанию..

Будет
источник
17
Да. Использование Maven требует, чтобы вы знали, что делаете, метод проб и ошибок не продвинется далеко. С другой стороны, есть несколько хороших ссылок. Это один .
Никола Мусатти
6
Итак, вы добавили это <relativePath>..</relativePath>под <parent></parent>?
Octavian
Спасибо. Некоторое время пробовал решить проблему. Я выбрал относительный путь от ../pom.xmlдо ../<parent folder>/pom.xml.
Марио Курцвейл
Ввод <relativePath> не обязательно решит проблему, если вы указываете на частный репозиторий. Посмотрите на ответ Томаша Залуски для подробного объяснения.
Gi1ber7
Я пытаюсь расширить свой основной файл pom на другой (для тестов) в том же каталоге (тот же проект). Но это не решает эту ошибку. Есть идеи, как это исправить?
Praneeth Peiris
39

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

user1747134
источник
3
Именно это и решило мою проблему, спасибо !!! Но не помещая его в какой-либо каталог, а указывая на него Eclipse в Preferences - Maven - User Settings.
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+F5Maven Update Project, активировать профиль и вернуть объявление репозитория в профиль. Это скорее ошибка 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. Решение состоит в том, чтобы указать файл 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>
Stakowerflol
источник
2
Это применимо только тогда, когда родительский объект не находится в той же структуре каталога, то есть в удаленном репозитории.
Ондра Жижка
2

проверьте, есть ли у вас правильные значения в дочерних POM

GroupId
ArtefactId
Version

В Eclipse, например, вы можете искать его: Eclipse: поиск родительского pom

трость
источник
2

<relativePath>

Если вы строите в рамках дочернего проекта, это <relativePath>может помочь вам разрешить родительский pom.

установить родительский pom

Но если вы создадите дочерний проект из его папки, <relativePath>это не сработает. Вы можете installсначала поместить родительский pom в свой локальный репозиторий, а затем построить дочерний проект.

Ястреб
источник
1

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

Один раз запустите mvn. Это загрузит все необходимые репозитории. После этого шага вы можете вернуться к 1.0_A0.

Прасант Пеннепалли
источник
Это работает, только если требуемый родительский POM имеет ту же версию, что и POM подмодуля. Это не всегда так.
Герольд Брозер
1

У меня была аналогичная проблема на работе.

Сборка родительского проекта без зависимости создала файл parent_project.pom в папке .m2.

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

<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>
Прабху
источник
Ваш ответ вместе с <relativePath /> решил проблему для меня. * Только relativePath - нет.
Gyro Gearloose,
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 сборки реактора был один и тот же artefactId.

Benez
источник
В моем случае этого родительского модуля не было в родительской папке, мне пришлось добавить в дочерний модуль <relativePath>
../parent-module-dir