2012-10-25 12 views
12

Ho definito la versione 4.3 nel padre pom per una libreria A, ma nel modulo del progetto specificato dal figlio pom, è richiesta la versione 2.5 di A. Il problema che sto affrontando è che entrambe le versioni vengono mantenute e quindi sto ottenendo conflitti.sostituisce la versione della libreria definita in parent pom

Si prega di indicare come risolvere il problema.

+0

La versione 2.5 è richiesta dal proprio codice o da qualche plugin o dipendenza? –

+0

Da una dipendenza e anche dal codice. – Rndm

risposta

5

In generale, si consiglia di avere una sola versione di dipendenza nel classpath in un dato momento. Fare in questo modo ti permetterà di sapere esattamente quale versione della classe sarà usata in fase di runtime.

Per evitare conflitti di versione cercano di specificare la propria dipendenza come questo:

<dependency> 
    <groupId>commons-daemon</groupId> 
    <artifactId>commons-daemon</artifactId> 
    <version>1.0.1</version> 
    <exclusions> 
     <exclusion> 
      <groupId>some_group</groupId> 
      <artifactId>some_artifact</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Dove è necessario specificare il groupId e artifactId del manufatto in conflitto con la versione 2.5.

+0

Questo non funziona :( – Rndm

+0

@Rndm Sii più specifico Cosa hai fatto e perché pensi che la soluzione sopra non funzioni –

+0

Thnks, hai capito l'errore, la soluzione che hai spiegato funzionava, grazie – Rndm

3

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

Dipendenza mediazione - Determina quale verrà utilizzata la versione di una dipendenza quando si incontrano più versioni di un artefatto. Attualmente, Maven 2.0 supporta solo l'uso della "definizione più vicina", il che significa che utilizzerà la versione della dipendenza più vicina al progetto nell'albero delle dipendenze. Puoi sempre garantire una versione dichiarandola esplicitamente nel tuo POM del progetto. Si noti che se due versioni di dipendenza sono alla stessa profondità nell'albero delle dipendenze, fino a quando Maven 2.0.8 non è stato definito quale vincerebbe, ma poiché Maven 2.0.9 è l'ordine nella dichiarazione che conta: la prima dichiarazione vince.

  • "definizione più vicina" significa che la versione utilizzata sarà la più vicina al progetto nell'albero delle dipendenze, ad es. se le dipendenze per A, B e C sono definite come A -> B -> C -> D 2.0 e A -> E -> D 1.0, allora D 1.0 verrà usato quando si costruisce A perché il percorso da A a D attraverso E è più corto. Si potrebbe aggiungere una dipendenza esplicitamente a D 2.0 in A per forzare l'uso di D 2,0

Sembra una versione 2.5 viene incluso transitivamente da un'altra dipendenza. Questo mette entrambe le versioni 4.3 e 2.5 alla stessa lunghezza.

  • Progetto -> Parent -> A 4.3
  • Progetto -> Dependency -> A 2,5

Definendo in modo esplicito la dipendenza di A da 2,5 nel progetto sarà poi il più vicino e ignorare qualsiasi altre versioni.

Problemi correlati