Frage

Ich bin mit Eclipse mit der run-jetty-run plugin zu starten meiner J2EE-web-apps.Mein Projekt verwendet Spring, und der spring-Konfiguration verwendet Dinge wie HttpInvokerProxy und Eigenschaften Platzhalter.

  1. Wenn der Frühling Gläser im Klassenpfad (ich meine, konfiguriert in den "classpath" auf der Registerkarte "run configuration") und externen (nicht in WEB-INF/lib), funktioniert alles einwandfrei.
  2. Aber wenn ich spring.jar (oder alle Frühlings-Gläser) in die WEB-INF/lib/ - Verzeichnis (+verwiesen, die in den Klassenpfad), der ärger beginnt.Ich habe versucht, mit beiden Werte von jettys parentLoaderPriority:
    1. wenn parentLoaderPriority ist true, Ich bekomme eine Beschwerde von Xerces sagen, es kann nicht überprüfen Sie die spring.xml's XSD (so Schätze ich Jetty embedded andere version von xerces Konflikt mit mir)
    2. wenn parentLoaderPriority ist false, die Eigenschaft Platzhalter funktioniert nicht mehr (ich habe versucht, den Austausch mit den direkten Werten) der Frühling auch nicht konvertieren die HttpInvokerProxy in die richtige Schnittstelle, wie in einigen Klassen fehlt
  3. Schließlich, wenn ich lassen Sie alle meine jar-Dateien in WEB-INF/lib und entfernen Sie den passenden classpath-Einträge, die es nicht finden können die Klassen:Ich bekomme eine ClassDefNotFoundException com/google/common/collect/Lists obwohl google-collections.jar in WEB-INF/lib und enthält die class-Datei...Diese mit beiden Werte von parentLoaderPriority.

Methode #3 funktioniert in Tomcat, obwohl.Also, ich denke, dies jetty launcher hat einige zum laden von Klassen-Konfiguration mache ich falsch ?

War es hilfreich?

Lösung

Es klingt wie Sie Ihre Anwendung mit etwas auf dem 'externen' classpath (ich nenne es X) und übergeben Sie einen Verweis;das funktioniert gut, weil "außen" wird in einem übergeordneten Klassenladeprogramm auf Ihre Bewerbung.

'X' verwendet dann die Referenz, um etwas zu tun mit dem Frühling.Jedoch ist der Frühling auf Ihrer app classpath, aber X auf die externe classpath.Der Frühling ist daher nicht sichtbar X, daher der Fehler.

Als Sie entdeckt, putting Frühling in der externen classpath ist eine gültige Problemumgehung.Dies sollte auch funktionieren, wenn der Frühling auf der externen und web-app klassenpfade.

Was " X " ist?Der wahrscheinlichste Kandidat wäre commons-logging, die eine lange Geschichte von Schrauben um mit classloadern.Möchten Sie vielleicht zu prüfen, mit einem slf4j Umsetzung statt (wie Logback) und die commons-logging-Schnittstelle über jcl-over-slf4j

Ressourcen:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top