Maven: nierozstrzygalny POM rodzic


103

Mam konfigurację projektu Maven jako 1 projekty powłoki i 4 moduły podrzędne. Kiedy próbuję zbudować powłokę. Dostaję:

[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]

Jeśli próbuję zbudować samotny moduł, pojawia się ten sam błąd, tylko zamień module1, jakimkolwiek modułem to był.

Niech wszyscy odwołują się do rodzica w swoich pomponach.

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

Oto odpowiednie części muszli:

<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
jeśli ktoś jest zainteresowany dodaniem <relativePath>..</relativePath>pod <parent></parent>działało u mnie.
kaptan

2
uruchom tomvn install -N & mvn install
Se Song

Ścieżka względna jest dla niezgodnych projektów, a nie „rozwiązaniem”, gdy oczekiwanie jest w folderze nadrzędnym modułu powinno być dostępne.
Rick O'Shea

W moim przypadku było to spowodowane błędnym wpisaniem w pliku pom.xml.
Oleksii Kyslytsyn

Podsumowanie wszystkich możliwych problemów: stackoverflow.com/a/62704660/6172857
Sumit Badsara

Odpowiedzi:


95

Tylko w celach informacyjnych.

Radości Mavena.

Umieszczenie względnej ścieżki modułów na ../pom.xml rozwiązało problem.

parentElement ma relativePathelement, który trzeba punktu do katalogu nadrzędnego. Domyślnie..


17
Tak. Korzystanie z Maven wymaga, abyś wiedział, co robisz, metoda prób i błędów nie zaprowadzi Cię zbyt daleko. Z drugiej strony dostępnych jest kilka dobrych referencji. To jest jeden .
Nicola Musatti,

6
Więc dodałeś to <relativePath>..</relativePath>pod <parent></parent>?
oktawski

Dzięki, próbowałem tego przez chwilę, aby rozwiązać problem. Wybrałem względną ścieżkę od ../pom.xmldo ../<parent folder>/pom.xml.
Mario Kurzweil

Umieszczenie <relativePath> nie rozwiązałoby problemu, jeśli wskazuje się na prywatne repozytorium. Poszukaj odpowiedzi Tomáša Záluský, aby uzyskać szczegółowe wyjaśnienie.
Gi1ber7

Próbuję rozszerzyć mój główny plik pom do innego (do testów) w tym samym katalogu (ten sam projekt). Ale to nie rozwiązuje tego błędu. Masz jakiś pomysł, jak to naprawić?
Praneeth Peiris,

39

Można to również naprawić, umieszczając odpowiedni settings.xmlplik w ~/.m2/katalogu.


3
Dokładnie to rozwiązało mój problem, dzięki !!! Ale nie przez umieszczenie go w jakimś katalogu, ale wskazanie Eclipse w Preferencjach - Maven - Ustawienia użytkownika.
Brain

Rozwiązał też mój problem. Trzeba tylko upewnić się, że ustawienia są odpowiednio skonfigurowane, maven.repotak jak ...
Saran

21

Alternatywnym powodem może być również to, że artefakt nadrzędny pochodzi z repozytorium, do którego nie można uzyskać dostępu pom.xml, zazwyczaj z repozytorium prywatnego. Rozwiązaniem było udostępnienie tego repozytorium w 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>

W moim przypadku problem był jeszcze bardziej skomplikowany przez Eclipse: repozytorium było aktywne tylko w specjalnym profilu ( <profiles><profile><id>activate-private-repo</id><repositories>...), a Maven GUI w Eclipse nie pozwalał na ustawienie tego profilu za pomocą Ctrl+Alt+Pskrótu.

Rozwiązaniem było tymczasowe zadeklarowanie repozytorium poza profilem (bezwarunkowo), uruchomienie Alt+F5Maven Update Project, aktywacja profilu i ponowne umieszczenie deklaracji repozytorium w profilu. Jest to raczej błąd Eclipse, a nie Maven.


Ta sama sytuacja! Prywatne repozytorium nie zostało dodane do pom.
LoranceChen

4

Nierozdzielalny POM macierzysty POM: Oznacza to, że nie można rozwiązać nadrzędnego repozytorium.

Trun on debug mode:

[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:

Ponieważ repozytorium rodzica nie jest częścią centrali maven. Rozwiązaniem jest określenie setting.xml w ~ m2 /, aby pomóc w uzyskaniu macierzystego POM. /Users/username/.m2/settings.xml

W tym kodzie XML może być konieczne określenie informacji o repozytorium.


Niesamowite ! Dodanie szczegółów mojego repozytorium w ustawieniach xml zadziałało. Ale dlaczego nie bierze z pom xml (który ma dodane to samo repozytorium)?
smilyface

3

Po prostu dodaj <relativePath />tak, żeby rodzic w pomie wyglądał następująco:

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

2
Ma to zastosowanie tylko wtedy, gdy rodzic nie znajduje się w tej samej strukturze dir, tj. W zdalnym repozytorium.
Ondra Žižka

2

sprawdź, czy masz poprawne wartości w podrzędnych plikach POM

GroupId
ArtefactId
Version

Na przykład w Eclipse możesz go wyszukać: Eclipse: szukaj rodzica pom


2

<relativePath>

Jeśli tworzysz w ramach projektu podrzędnego, to <relativePath> możesz pomóc w rozwiązaniu problemu nadrzędnego pom.

zainstaluj pompę rodzica

Ale jeśli zbudujesz projekt podrzędny z jego folderu, <relativePath>nie działa. Możesz installnajpierw umieścić nadrzędny pom w swoim lokalnym repozytorium, a następnie zbudować projekt podrzędny.


1

Zastąp 1.0_A0 $ {project.version}

Uruchom mvn raz. Spowoduje to pobranie wszystkich wymaganych repozytoriów. Po tym kroku możesz wrócić do 1.0_A0.


Działa to tylko wtedy, gdy wymagany nadrzędny POM ma tę samą wersję co POM podmodułu. Nie zawsze tak jest.
Gerold Broser,

1

Miałem podobny problem w pracy.

Budowanie projektu nadrzędnego bez zależności utworzyło plik parent_project.pom w folderze .m2.

Następnie dodaj moduł potomny w nadrzędnym POM i uruchom kompilację Maven.

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

Twoja odpowiedź, razem z <relativePath />, rozwiązała problem za mnie. * Względna ścieżka sama nie.
Gyro Gearloose

0

Dodaj zależność w programie

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

Rozwiązałem ten problem na sobie po bardzo długiej próbie, utworzyłem kolejny plik o nazwie „parent_pom.xml” w katalogu plików modułu potomnego w lokalnym i wkleiłem zawartość pliku parent_pom.xml, który znajduje się na zdalnym, do nowo utworzonego pliku „parent_pom.xml” ”. U mnie zadziałało i zniknął komunikat o błędzie.


0

Wewnątrz znacznika ścieżki względnej wykonaj następujące czynności

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

a następnie RunAs-> Maven build

U mnie to zadziałało.


-2

Miałem problem, że dwa pliki pom.xml kompilacji reaktora miały ten sam artefactId.


W moim przypadku tego modułu nadrzędnego nie było w folderze nadrzędnym, musiałem dodać moduł podrzędny <relativePath>
../parent-module-dir
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.