2013-02-08 7 views
11

Ho un progetto multi-modulo con il layout, come di seguito:transitiva non dipendenze risolto quando la dipendenza versione definita nei genitori dependencyManagement

pom.xml 
projA 
    trunk 
    pom.xml 
    projA1 
     pom.xml 
    projA2 
     pom.xml 

Nel pom del genitore ho definito dependencyManagement e properties:

<properties> 
    <javaee-api.version>6.0</javaee-api.version> 
    <log4j.version>1.2.11</log4j.version> 
</properties> 
... 
<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>${javaee-api.version}</version> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

pom.xml per projA2 contiene:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
</dependency> 

pom.xml per projA1 contiene:

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>projA2</artifactId> 
    <version>${project.version}</version> 
</dependency> 

In projA1 sto usando log4j ma la dipendenza è transitiva (da projA2).

Ora quando corro mvn dependency:tree -X ottengo:

[WARNING] Invalid POM for mypackage:projA2:jar:1.0, transitive dependencies (if any) will not be available, enable debug logging for more details: Some problems were encountered while processing the POMs: 
[ERROR] 'dependencies.dependency.version' for javax:javaee-api:jar is missing. @ line 37, column 15 
[ERROR] 'dependencies.dependency.version' for log4j:log4j:jar is missing. @ line 56, column 15 

ma appena sotto queste righe ottengo:

[DEBUG] testArtifact: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] includeArtifact: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] startProcessChildren: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] endProcessChildren: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] testArtifact: artifact=javax:javaee-api:jar:6.0:provided 
[DEBUG] includeArtifact: artifact=javax:javaee-api:jar:6.0:provided 
[DEBUG] startProcessChildren: artifact=javax:javaee-api:jar:6.0:provided 
[DEBUG] endProcessChildren: artifact=javax:javaee-api:jar:6.0:provided 

L'unica soluzione è quella di specificare la versione log4j (<version>${project.version}</version>) in projA2 pom.xml .

Domanda:?. Che cosa sto facendo male :-(non voglio specificare le versioni che sono già definiti nella sezione del genitore dependencyManagement

risposta

0
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
</dependency> 

deve essere in /projA/trunk/pom.xml invece di /projA/trunk/projA2/pom.xml

.

Naturalmente, se si desidera che questo essere disponibili su tutti i tuoi progetti e non solo proja che deve essere in pom.xml

+0

Grazie per la risposta! Non voglio aggiungere questa dipendenza a tutti i progetti in ProjA. Ci sono più di due progetti, quindi la tua soluzione non risolvere il mio problema – Arek

-1

Add:.

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>${log4j.version}</version> 
</dependency> 

Alla sezione dependencyManagement del POM padre (proprio come con JUnit). Tutti i bambini che necessitano di log4j possono indicare una dipendenza:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
</dependency> 

senza la versione, e funzionerà, perché la versione sarà tirato dal genitore.

+0

Grazie per la risposta! So che dovrebbe funzionare, ma non vuole funzionare;/... – Arek

8

Ho affrontato lo stesso problema. Nel mio caso, se è stato dimenticato, aggiorna POM padre nel repository locale. Prova a fare

mvn install 

per il modulo genitore.

+2

Se vuoi creare un modulo genitore senza tutti i suoi figli, usa "mvn install -N" – CapnSmack

3

Si è verificato un problema simile. Rimozione (manualmente) di tutti i progetti coinvolti dal repository locale ed eseguire "mvn clean install" ha funzionato in seguito per me.

0

Ho avuto un problema simile: ho definito una proprietà nel mio settings.xml e l'ho usata per systemPaths nelle dipendenze dei miei poms e del mio padre pom. L'ignoranza del pacchetto "non valido" porta a errori di compilazione, perché nel percorso di classe mancano pacchetti utilizzati come dipendenze transitive.

Ho trovato (trasferito al problema), che se si chiama Maven con "mvn -Dlog4j.version = 2.1.11 "l'avviso scompare e anche gli errori di compilazione.Per me questa soluzione non è soddisfacente ma risolve il problema con dipendenze transitive invisibili

0

Ho avuto lo stesso identico problema dell'OP. Si è scoperto che era un errore di programmazione , come l'aggiornamento alla versione più recente Maven (3.3.3 al momento di scrivere) risolto il problema

0

può essere problema repository tua ricerca di dipendenze mancanti scoprire repository destra e aggiungere a voi pom in questo modo:.

<repositories> 
     <repository> 
      <id>jboss-3rd-party-releases</id> 
      <url>https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/</url> 
     </repository> 
    </repositories> 
Problemi correlati