Wie funktioniert Jetty beim Laden von Klassen mit derselben Klasse mit unterschiedlichen Abhängigkeiten?

8

Ich möchte wissen, wie Jetty mehrere Abhängigkeitspfade behandelt, die zu derselben Klasse führen können.

Zum Beispiel

Jetty wird mit JSTL-1.2 ausgeliefert, aber ich habe eine Abhängigkeit hinzugefügt, um JSTL-1.2.4 zu laden. Wenn ich beim Kompilieren den Quellcode in Eclipse herunterlade, versuche es bei der Version 1.2.4 zu brechen.

Ich möchte wissen, welche Version übergeben wird, um Byte-Code einer JSP zu generieren, wenn es zwei Versionen von Klassen gibt, sagen wir eine Basisklasse JstlCoreTlv in Abhängigkeit (eine vorkompilierte Version also JSTL 1.2 mit Anlegesteg und einer von maven Abhängigkeit übergeben 1.2.4)

Kurz gesagt, ich möchte wissen, wie Anlegesteg es tut. Ich möchte wissen, wie Jetty pre-packed gegen Abhängigkeiten priorisiert, die später hinzugefügt werden. Selbst wenn die Version älter ist als die vorkompilierte Version, wird sie überschrieben und verweist auf zusätzliche Abhängigkeiten?

Ich konnte in diesem Zusammenhang nicht viel von der Stegdokumentation erfahren. Hilfe wird sehr geschätzt

    
Karthik Narisetti 05.01.2017, 19:19
quelle

2 Antworten

4
  • Angenommen, Sie planen nicht, die jstl-Version Ihrer Jetty-Installation zu ändern.
  • Angenommen, Sie verwenden nur die Version 1.2.4 von jstl, um Ihren Code zu kompilieren, und fügen Sie nicht das jar in Ihrer WAR WEB-INF / lib hinzu.

Wenn Sie mit Maven gegen 1.2.4 kompilieren und verpacken und das Packaged War on Jetty bereitstellen, verwendet Jetty 1.2 (das ist das auf dem Server-Klassenpfad und nicht 1.2.4 (weil es für Jetty nicht verfügbar ist). Dies könnte zu Problemen führen.

Der beste Weg, um Probleme zu vermeiden, besteht darin, genau die gleiche Version in Ihren Maven-Projektabhängigkeiten zu verwenden, da die Version von der Jetty-Version verwendet wird, für die Sie bereitstellen.

    
Escay 13.01.2017 09:28
quelle
4

Die Servlet-Spezifikation erfordert Folgendes:

  • Klassen, die in den Klassen WEB-INF / lib oder WEB-INF / enthalten sind, haben Vorrang vor den Klassen auf dem übergeordneten Klassenlader (hier ist der Klassenlader von jetty).

Aus der Dokument der Anlegestelle

  

Eine WEB-INF-Klasse kann eine Server-Klasse ersetzen.

Und die Serverklasse ist hier die Jetty-Implementierung des j2ee-Standards (Code von jetty Quellcode ):

%Vor%

Sie können auch die Steuerung der Serverklasse hinzufügen, indem Sie Folgendes aufrufen:

Tony 14.01.2017 11:43
quelle