2016-07-07 18 views
0

Ich benutze mehrere Frühjahr basierte Maven Repositories in einem Web-Projekt, und ich habe Probleme mit den Abhängigkeiten von Kind POM verwendet.Vermeiden Sie Kind Abhängigkeiten überschreiben Eltern Abhängigkeiten mit Maven 3

Ich habe ein Elternteil POM wie folgt aus:

<dependencyManagement> 
    <dependencies> 

     <!-- SPRING -->    
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-framework-bom</artifactId> 
      <version>4.3.0.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

     <!-- SPRING SECURITY --> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-bom</artifactId> 
      <version>4.1.0.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

     <!-- SPRING BOOT --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-dependencies</artifactId> 
      <version>1.3.5.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

     <!-- SPRING WS --> 

     <dependency> 
      <groupId>org.springframework.ws</groupId> 
      <artifactId>spring-ws-core</artifactId> 
      <version>2.2.3.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.ws</groupId> 
      <artifactId>spring-ws-security</artifactId> 
      <version>2.2.3.RELEASE</version> 
     </dependency> 
     <!-- OTHER DEPENDENCIES OMITTED --> 
    </dependencies> 
</dependencyManagement> 

Und ein Kind POM wie folgt aus:

<dependencies> 
    <dependency> 
     <groupId>org.springframework.ws</groupId> 
     <artifactId>spring-ws-security</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-core</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
    </dependency> 
    <!-- OTHER DEPENDENCIES OMITTED --> 
</dependencies> 

Soweit mein Verständnis von Maven Ausgrenzung geht, das das übergeordnete des vermeiden sollte Eltern-POM-Version, aber aufgrund der Tatsache, dass Spring-Ws-Sicherheit von einer niedrigeren Version von Spring-Core (4.0.9) abhängt, deren Methode geändert wurde, kann ich die App aufgrund eines NoSuchMethodError nicht auf einem lokalen Tomcat-Server bereitstellen Ausnahme, die auch ausgelöst werden kann, wenn die App tatsächlich bereitgestellt wird t bleibt die Abhängigkeit von der alten Feder-Kern-Version bestehen.

Wie kann ich dieses Überschreiben von Abhängigkeiten vermeiden? Oder gibt es eine Möglichkeit, beide Abhängigkeiten zu verwenden (was, soweit ich gesucht habe, nicht sicher ist)?

Verbindungen bereits besucht:

Similar problem, but from child to parent,

Exclusions example

Nur wenige erwähnt, habe ich andere als gut besucht, aber die Links vergessen.

Bearbeiten: Frühjahr-Ws Abhängigkeiten verwenden Frühling 4.0.9, die die Version 4.3.0 überschreibt (die, die ich verwenden muss) Ich habe in der Eltern POM definiert.

+- org.springframework.ws:spring-ws-core:jar:2.2.3.RELEASE:compile 
[INFO] | | | +- org.springframework:spring-oxm:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE) 
[INFO] | | | +- org.springframework:spring-web:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE) 
[INFO] | | | \- org.springframework:spring-webmvc:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE) 
+0

Bitte geben Sie an, welche Versionen von Bibliotheken Sie erhalten und welche Versionen Sie erhalten möchten. Sie können 'mvn dependency: tree' ausführen, um Abhängigkeiten aufzulisten. –

+0

Ich habe einige der falschen Abhängigkeiten aufgeführt @AntonKoscejev –

+0

Also basierend auf Ihren Kommentar zu Sundaraj's Antwort Ich bin mir nicht sicher, was genau Sie versuchen zu erreichen. Möchten Sie, dass diese Spring-Artefakte Version 4.3 oder 4.0 sind? Du bekommst 4,3 wegen deiner Eltern, aber du sagst, du willst nicht, dass ein Kindprojekt das ändert, also willst du 4.3 bekommen? Aber Feder-ws 2.2 ist nicht binär kompatibel mit Feder 4.3 und erfordert eine ältere Version. Also müssen Sie entweder 4.0 in Kind verwenden (in Eltern definiert oder in Kind überschrieben), oder Sie benötigen eine Version von Spring-ws, die mit Feder 4.3 binär kompatibel ist. Mit was genau willst du helfen? –

Antwort

0

Sie können einfach tun explizite Überschreibung in Ihrem Kind pom durch die Version 4.0.9 zu erwähnen, wie unten.

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.0.9</version> 
</dependency> 

Wie weiter unten angegeben, wird diese Version beeinflusst das Kind-of-Kind pom, falls vorhanden.

eine Version

Eine Version Erzwingen werden immer geehrt wenn es im aktuellen POM mit einer bestimmten Version deklariert wird - jedoch, es darauf hingewiesen, dass dies sein sollte, wird auch andere poms stromab beeinflussen, wenn es selbst abhängig von der Verwendung transitiver Abhängigkeiten ist.

+0

Danke für die schnelle Antwort Sundararaj, aber das Problem ist, ich möchte nicht die Version innerhalb der Kinder POM überschreiben, im Grunde, was ich will, ist die Version nicht zu übergehen, das ist der Grund, warum ich die Abhängigkeit Version Spring-Ws ausgeschlossen wurde benutzen. –