Maven: POM genitore non risolvibile


102

Ho configurato il mio progetto Maven come 1 progetto shell e 4 moduli bambini. Quando provo a costruire la shell. Ottengo:

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

Se provo a costruire un modulo solitario ottengo lo stesso errore solo sostituire module1, con qualunque modulo fosse.

Invitali tutti a fare riferimento al genitore nei loro poms.

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

Ecco le parti rilevanti del pom di conchiglia:

<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
se qualcuno è interessato, l'aggiunta di <relativePath>..</relativePath>under ha <parent></parent>funzionato per me.
kaptan

2
esegui questomvn install -N & mvn install
Se Song

Il percorso relativo è per progetti non conformi non una "soluzione" quando l'aspettativa è un pom nella cartella principale del modulo dovrebbe essere accessibile.
Rick O'Shea

Nel mio caso è stato a causa dell'errore di digitazione nel file pom.xml.
Oleksii Kyslytsyn

Tutte le questioni possibili riassunti: stackoverflow.com/a/62704660/6172857
Sumit Badsara

Risposte:


94

Solo per riferimento.

Le gioie di Maven.

Mettendo il percorso relativo dei moduli in ../pom.xml lo ha risolto.

L' parentelemento ha un relativePathelemento che devi puntare alla directory del genitore. Il valore predefinito è..


17
Sì. L'uso di Maven richiede che tu sappia cosa fai, tentativi ed errori non ti porteranno molto lontano. D'altra parte ci sono molte buone referenze disponibili. Questo è uno .
Nicola Musatti

6
Quindi hai aggiunto questo <relativePath>..</relativePath>sotto <parent></parent>?
ottaviano

Grazie l'ho provato per un po 'per risolvere il problema. Ho preso il percorso relativo da ../pom.xmla ../<parent folder>/pom.xml.
Mario Kurzweil

Mettere <relativePath> non risolverebbe il problema se stai puntando a un repository privato. Cerca la risposta di Tomáš Záluský per una spiegazione dettagliata.
Gi1ber7

Sto cercando di estendere il mio file pom principale a un altro (per i test) nella stessa directory (stesso progetto). Ma questo non risolve questo errore. hai qualche idea su come aggiustarlo?
Praneeth Peiris

39

Può anche essere risolto inserendo il settings.xmlfile corretto nella ~/.m2/directory.


3
Esattamente questo ha risolto il mio problema, grazie !!! Ma non inserendolo in una directory, ma puntando Eclipse su di esso in Preferenze - Maven - Impostazioni utente.
Brain

Ho risolto anche il mio problema. Devi solo assicurarti che le impostazioni siano configurate correttamente maven.repoanche per ..
Saran

21

Un motivo alternativo potrebbe anche essere che l'artefatto genitore proviene dal repository che non è accessibile da pom.xmlun repository solitamente privato. La soluzione era fornire quel repository in 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>

Nel mio caso il problema era ancora più complicato a causa di Eclipse: il repository era attivo solo in un profilo speciale ( <profiles><profile><id>activate-private-repo</id><repositories>...) e la GUI di Maven in Eclipse non permetteva di impostare questo profilo tramite Ctrl+Alt+Pscorciatoia.

La soluzione era dichiarare temporaneamente il repository al di fuori del profilo (incondizionatamente), avviare il Alt+F5progetto di aggiornamento Maven, attivare il profilo e rimettere la dichiarazione del repository nel profilo. Questo è piuttosto un bug di Eclipse, non un bug di Maven.


Stessa situazione! Repo privato non aggiunto al pom.
LoranceChen

4

POM padre non risolvibile: questo significa che non è possibile risolvere il repository principale.

Trun in modalità debug:

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

Perché il repository genitore non fa parte della centrale di Maven. La soluzione è specificare un setting.xml in ~ m2 / per aiutare a ottenere il POM genitore. /Users/username/.m2/settings.xml

In tale XML, potrebbe essere necessario specificare le informazioni sul repository.


Eccezionale ! L'aggiunta dei dettagli del mio repository nelle impostazioni xml ha funzionato. Ma perché non prende dal pom xml (che ha lo stesso repo aggiunto)?
smilyface

3

Basta aggiungere in <relativePath />modo che il genitore in pom dovrebbe apparire come:

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

2
Questo si applica solo quando il genitore non si trova nella stessa struttura di directory, cioè in un repository remoto.
Ondra Žižka

2

verifica se hai valori corretti nei POM figlio

GroupId
ArtefactId
Version

In Eclipse, ad esempio, puoi cercarlo: Eclipse: cerca genitore pom


2

<relativePath>

Se costruisci sotto un progetto figlio, allora <relativePath>può aiutarti a risolvere il pom genitore.

installa genitore pom

Ma se compili il progetto figlio dalla sua cartella, <relativePath>non funziona. Puoi prima installil genitore pom nel tuo repository locale, quindi costruire il progetto figlio.


1

Sostituisci 1.0_A0 con $ {project.version}

Esegui mvn una volta. Questo scaricherà tutti i repository richiesti. È possibile tornare a 1.0_A0 dopo questo passaggio.


Funziona solo se il POM genitore richiesto ha la stessa versione del POM del sottomodulo. Non è sempre così.
Gerold Broser

0

Ho avuto un problema simile al mio lavoro.

La creazione del progetto padre senza dipendenze ha creato il file parent_project.pom nella cartella .m2.

Quindi aggiungi il modulo figlio nel POM genitore ed esegui build Maven.

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

0

Aggiungi una dipendenza in

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

Ho risolto il problema su di me dopo un lungo tentativo, ho creato un altro file chiamato "parent_pom.xml" nella directory dei file del modulo figlio in locale e ho incollato il contenuto di parent_pom.xml, che si trova in remoto, nella nuova creazione "parent_pom.xml ". Ha funzionato per me e il messaggio di errore è scomparso.


0

All'interno del tag del percorso relativo fare come segue

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

e quindi RunAs-> Maven build

Ha funzionato per me.


-2

Ho avuto il problema che due file pom.xml di build del reattore avevano lo stesso artefactId.


Nel mio caso, questo modulo genitore non era nella cartella genitore, ho dovuto aggiungere nel modulo figlio <relativePath>
../parent-module-dir
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.