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.