2011-09-30 14 views
42

Ho il mio progetto di installazione Maven come 1 progetto di shell e 4 moduli figli. Quando provo a costruire la shell. Ottengo:Maven: genitore non risolvibile POM

[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 creare un modulo solitario ottengo lo stesso errore, sostituisco solo il modulo1, con qualunque modulo esso fosse.

Fare in modo che tutti facciano riferimento al genitore nei loro poms.

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

Ecco le parti pertinenti del pom shell:

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

risposta

50

Solo per riferimento.

Le gioie di Maven.

Inserire il percorso relativo dei moduli in ../pom.xml risolto.

L'elemento parent ha un elemento relativePath che è necessario puntare alla directory del genitore. L'impostazione predefinita è ..

+11

Sì.Usare Maven richiede che tu sappia cosa fai, prove ed errori non ti porteranno molto lontano. D'altra parte ci sono molte buone referenze disponibili. Questo è [uno] (http://www.sonatype.com/books/mvnref-book/reference/). –

+0

Quindi hai aggiunto questo ' ..' sotto ''? – octavian

+0

L'ho indicato al mio valore relativoPath il valore predefinito maven puts there is .. – Will

6

Un motivo alternativo potrebbe anche essere che l'artefatto principale proviene dal repository che non è accessibile da pom.xml, in genere repository privato. La soluzione era quella di fornire tale registro 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ù complicata a causa di Eclipse: il repository è stato attivo solo sul profilo speciale (<profiles><profile><id>activate-private-repo</id><repositories>...) e Maven GUI in Eclipse non consentiva per impostare questo profilo tramite il collegamento Ctrl+Alt+P.

La soluzione era di dichiarare temporaneamente il repository all'esterno del profilo (incondizionatamente), avviare il progetto di aggiornamento Maven Alt+F5, attivare il profilo e riportare la dichiarazione del repository nel profilo. Questo è piuttosto un bug di Eclipse, non un bug di Maven.

+0

Stessa situazione! Il repository privato non è stato aggiunto al pom. – LoranceChen

10

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

+1

Esattamente quello che ha risolto il mio problema, grazie !!! Ma non inserendolo in qualche directory, ma indicando Eclipse in Preferenze - Maven - Impostazioni utente. – Brain

1

Controllare se Lei ha valori corretti in POM bambino

GroupId 
ArtefactId 
Version 

In Eclipse, ad esempio, è possibile cercare per esso: Eclipse: search parent pom

0

Sostituire 1.0_A0 con $ {} project.version

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

+0

Funziona solo se il POM padre richiesto ha la stessa versione del POM del sottomodulo. Questo non è sempre il caso. –

0

Ho avuto un problema simile al mio lavoro.

Creazione del progetto principale senza dipendenza creato il file parent_project.pom nella cartella .m2.

Quindi aggiungere il modulo figlio nel POM padre ed eseguire Maven build.

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