2017-11-17 4 views
1

Ich lese in allen Arten von Java-Bibliotheken, die das Jersey HTTP-Client-Paket verwenden, dass ich vorsichtig sein sollte, weil sie Jersey 2.x verwenden und wenn ich Jersey 1.x in meinem Klassenpfad bereits habe, kann es einige verursachen Konflikte.Warum sollte Jersey 1.x mit Jersey 2.x zusammenfallen?

Aber Jersey-Projekt änderte Gruppen-ID und Paketnamen, als es in Glassfish Projekt integriert wurde, beginnend mit Version 2.x.

Da Paketnamen unterschiedlich sind, welche Konflikte könnte es geben? Wenn ich Jersey 1.x in meinem Deployable habe, werden diese Klassen verwendet, da Jersey 2.x, das von der Glassfish Runtime zur Verfügung gestellt wird, völlig verschiedene Klassen mit unterschiedlichen Namen sind.

Ebenso, wenn ich Jersey 1.x in meinem Deployable habe, und einige Abhängigkeit kommt und Jersey 2.x hinzufügt, ist das einzige Problem, das ich haben kann, das folgende: ohne einen Deployment-Deskriptor wird Glassfish seine Version von verwenden die Bibliothek, nicht die zur Verfügung gestellte. Aber auf jeden Fall sollte kein Problem auftreten, weil ich sowohl Jersey 1.x als auch 2.x in meinem Klassenpfad habe, oder?

Bitte beraten, fehle ich etwas? Was ist los?

+1

Nehmen wir an, Klasse x in Version 2 hat eine verbesserte Version der gleichen Methode in Version 1 ... wie in der Welt ist der Compiler zu wissen, welche Sie verwenden möchten? ihre Pfade sind die gleichen, so sind ihre Klassennamen und Signaturen – Stultuske

+0

Nun, nein, es ist klar, dass Jersey Paketnamen vollständig in 2.x geändert hat, richtig? Das habe ich zumindest nach meinen Recherchen herausgefunden. Also, welche Konflikte, sie sind unterschiedliche Klassen. – amihaiemil

+0

immer wenn Sie verschiedene Versionen des gleichen Pakets laden, riskieren Sie Konflikte – Stultuske

Antwort

0

Ja, Sie sollten!

Denken Sie immer Twise, wenn Ihr Projekt mit Abhängigkeit verbunden ist, die außerhalb Ihrer Kontrolle ist.

Einer ist wie Sie, ve von 1.x bis 2.x erwähnt haben sie von sun Namespace zu glassfish Namespace bewegt.

Und auch in 1.x verwenden sie JEE6-Version von JAX-RS und in 2.x verwenden sie JEE7-Version von JAX-RS. Das ist eine große Sache. Zum Beispiel javax.ws.rs.core.Application verwendet in Jersey in verschiedenen Versionen sind unterschiedlich und kann nicht auf die gleiche Weise verwendet werden.

Jesey 2.x verwendet JEE 7. In JEE 7-Version von javax.ws.rs.core.Application hat

Jesey 1.x verwendet JEE 6. nur in JEE 6 Version von javax.ws.rs.core.Application hat

  • getClasses()
  • getclass()

Aber getProperties() ist nicht definiert. https://jersey.github.io/apidocs/1.19.1/jersey/javax/ws/rs/core/Application.html Das kann zu Fehlern wie NoSuchMethodErrorhttps://docs.oracle.com/javase/7/docs/api/java/lang/NoSuchMethodError.html Dies ist nur eine Inkompatibilität. Ich bin sicher, wenn Sie tiefer graben, können Sie mehr finden.

Es ist nicht nur die Namespaces, die zugrunde liegenden Implementierungen hat ein Protokoll geändert. Ja, glassfish runtime ist mit Trikot geladen. Aber Sie können in Schwierigkeiten sein, weil vorausgesetzt, dass Bereich verschiedene Artefaktnamen zu Inkonsistenzen führen können.

Verwandte Themen