2012-04-13 14 views
0

Ich habe ein Modul X, das von einer Third-Party-Bibliothek abhängig ist, die wiederum von Apache-Commons-Sammlungen 2.1 abhängt.Abhängigkeit von zwei Versionen eines Jar

In Modul X möchte ich die neuesten Apache-Commons-Sammlungen 3.0 verwenden, die einige zusätzliche Methoden als 2.1 hat. Wenn ich eine Abhängigkeit zu 3.0 hinzufüge, schätze ich, dass dies ein Problem verursachen wird, da der Klassenlader nur die erste Klasse aufnimmt, die er im Klassenpfad sieht. Gibt es eine gute Möglichkeit, dieses Problem zu umgehen?

Danke, S

Antwort

0

Gerade die Abhängigkeit bis 3,0 zu Ihrem Projekt hinzufügen und es wird über die ältere Version von 2.1 bevorzugen. Um explizit zu sein, können Sie einen Ausschluss hinzufügen. In jedem Fall verwenden Sie das Abhängigkeits-Plugin und die Analyse- und Baumziele, um zu sehen, was passiert.

Lange Geschichte kurz ... das passiert die ganze Zeit und wird gut und in jedem Fall können Sie kontrollieren, was passiert.

1

IMHO gibt es keine wirklich guten Weg ohne zusätzliche Lösung für Modularität (wie Java EE EAR oder OSGi). Ich denke jedoch, dass Sie nach einem einfachen Web-Modul (oder nicht) fragen, das direkt diese 3rd-Party-Bibliothek verwendet. Ich fürchte, Sie müssen diesen Konflikt manuell lösen. Fakt ist, dass Maven 2 Versionen von commons-collections nicht zur Verfügung stellt und von der Auflösung des Classloaders abhängt, sondern das Abhängigkeitsdiagramm auflöst und die Version auswählt, die mit den Deklarationen Ihrer POMs besser abschätzt. Das heißt, wenn Sie in Modul X die Abhängigkeit von commons-collections Version 3.0 deklarieren, wird diese Version verwendet, da diese Deklaration wichtiger ist als die Abhängigkeiten einiger Drittanbieter-Bibliotheken.

Das ist ein ernstes Problem der Java-Plattform selbst, die solche Probleme wie die berühmte JAR-Hölle in sich trägt. Leider ist es Ihr Problem, commons-collections Version auszuwählen und zu deklarieren, die sowohl Sie als auch Ihre 3rd-Party-lib erfüllen.

Verwandte Themen