Mehrere gleiche Jars im Classpath

Tarantoga

Aktives Mitglied
Liebe Community!

Für ein Web Projekt verwende ich Spring und Maven. Für den File-Upload benötigt man das commons-fileupload.jar.

Leider bekomme ich beim Upload eines Files immer einen NoSuchMethodError. Habe mittlerweile auch herausgefunden, dass das Problem darin liegt, dass sowohl commons-fileupload1.0 als auch die 1.1 Version auf dem Classpath liegen.

Da 1.0 immer zuerst aufgerufen wird entsteht der Error.
Nachdem ich nun die Dependencies aus dem pom-file entfernt habe wurden aus den ursprünglich 3 jars, die oben genannten zwei.

Explizit referenziere ich jetzt nirgends mehr auf die Jars, aber sie tauchen trotzdem immer wieder in der lib auf.
Ich vermute also, dass sie entweder im zuge von anderen Dependencies (zb. Spring, ..) heruntergeladen werden, oder von außerhalb bei jedem Clean&Build hinzugefügt werden.
Habe gelesen, dass der Glassfish Server so etwas tut.

Meine Frage also:
Wie kann ich verhindern, dass ohne meinen Willen verschiedene Versionen von commons-fileupload auftauchen?
Ich möchte einfach die Dependency in der pom haben und aus.
Also alle anderen möglichen Quellen killen, oder zumindest irgendwie rausfinden, wer oder was andauernd meinen Classpath zumüllt.

LG
 

javabar

Mitglied
Ich würde was probieren, aber ich weiss nicht ob es hilft:

commons-fileupload1.0.jar woanders hin verschieben. (wenn's nicht gebraucht wird, sondern 1.1)

Dann erstellst Du ein leeres jar, das keine Klassen enthält, und nennst es commons-fileupload1.0.jar, und legst es in den Ordner mit den anderen Jars.

Ist zwar keine saubere Lösung, aber es kann evtl. funktionieren, es sollte auf die Klassen vom 1.1 dann zugreifen. Wenn's nicht klappt, kann's sein die 1.0 wird woanders benötigt, dann hast du ein echtes Problem, wenn zwei verschiedene Versionen gleichzeitig benötigt werden.
 
M

Marcinek

Gast
Afaik wird das nicht klappen.

Er nutzt Artefakte, die 1.0 als Dep haben und Artefakte, die 1.1 als Deps haben.

Ich kenne mich mit Maven nicht 100 % aus, aber ich glaube er muss die unnötigen Artefakte "excluden" in der Pom.
 

kama

Top Contributor
Hi,

mal ein

Code:
mvn dependency:tree
auf Dein Projekt ausführen, dann solltest Du sehen woher die einzelnen Dependencies kommen...
Ausschluss von dependencies eben mit vorgeschlagener Vorgehensweise...excludes...

Gruß
Karl-Heinz Marbaise
 

caleb

Mitglied
Und hier wie diese exclusion funktioniert[XML]
<dependency>
<groupId>a.b</groupId>
<artifactId>lib.mit.abhängigkeit.zu.fileupload1.0</artifactId>
<version>x.x</version>
<exclusions>
<!-- eine oder mehrere exclusion -->
<exclusion>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</exclusion>
</exclusions>
</dependency>[/XML]

Die schuldige Lib wie im vorhergehenden Post erwähnt mit dependency:tree suchen.

Alternativ (und als instabile und schlechtere Lösung anzusehen) kannst Du die Reihenfolge der Abhängigkeiten im Pom umstellen. D.h. die Abhängigkeit zu der Version 1.1 muss vor der Abhängigkeit mit der Version 1.0 kommen. Maven würde in diesem Fall dann nur die Fileupload Library mit der Version 1.1 ins War kopieren.
Das die Reihenfolge aber garantiert wird von Maven steht meines Wissens nirgends garantiert, deswegen nimm doch die Lösung mit den Exclusions.
 

Tarantoga

Aktives Mitglied
Danke für eure Antworten!
Ich habe aus der Struts-Bibliothek commons-fileupload excluded und commons-fileupload1.0 aus der glassfish lib überhaupt entfernt. Ich weiß, das ist eher nicht so gut, aber ich konnte die Dependency einfach nicht finden.. Kann es sein, dass sie gar nicht von maven gemanaged wird?

Jedenfalls funktioniert es jetzt. Vielen Dank euch allen!

LG
 

caleb

Mitglied
Wenn es wirklich die Version im Glassfish lib war, die Ärger bereitet hast, kannst du auch im sun-web.xml den Classloader auf <delegate>false</delegate> setzen.
Das bewirkt, dass zuerst die mitgelieferten Libraries vom Classloader berücksichtig werden und erst im zweiten und dritten Schritt diejenigen der Domain und der Glassfish Installation.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Mehrere Bilder gleichzeitig bzw. dynamisch eines Objektes speichern Allgemeines EE 2
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
N JAAS login() mehrere Parameter an LoginModul übergeben Allgemeines EE 2
A JMS: Mehrere Durable Subscriber dynamisch zur Laufzeit erzeugen - setClientID() Allgemeines EE 2
MQue ein Rechner - mehrere BrowserFenster Allgemeines EE 3
K mehrere Datenbanken mit JBoss 4.2 und EJB3 Allgemeines EE 3
A Mehrere User gleichzeigig, wie mach ich das? Allgemeines EE 14
A Annotation "ID: Primary Key über mehrere Spalten möglic Allgemeines EE 3
M Mehrere Webanwendungen über einen Webserver? Allgemeines EE 2
B JSF - Mehrere Message-Bundles verwenden Allgemeines EE 17
E bei struts inhalte über mehrere seite verteilen Allgemeines EE 6
S mehrere Message Resources in Struts ansprechen Allgemeines EE 7
G Mehrere Probleme mit Servlets/Java Allgemeines EE 15
clemson HTML Taglib - mehrere Submit-Buttons & Internationalisie Allgemeines EE 4
M MVC in J2EE: mehrere JSPs über ein Servlet kontrollieren Allgemeines EE 7
clemson mehrere Mail Attachments - JSP Struts Allgemeines EE 7
T Jsp die mehrere Servlets aufruft erzeugt Fehler Allgemeines EE 10
W Mehrere Applikationenen mit einer Anmeldung möglich? Allgemeines EE 11
B mehrere submit-buttons in einer jsp Allgemeines EE 11
R Abhängigkeiten zwischen EJB-JARs Allgemeines EE 0
E CDI mit verschiedenen Jars in EAR klappt auf Jboss AS 7.1.1.Final nicht Allgemeines EE 8
S Jars nachträglich laden (aus den WEB-INF/lib Ordner) Allgemeines EE 11
C WAS findet Jars in EAR nicht? Allgemeines EE 2
J Axis Client - Welcher JARs mitliefern? Allgemeines EE 5
B Tomcat --- Können sich JARs in WARs beissen? Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben