Frage

Ich habe eine Java (6) Anwendung, die Hibernate verwendet (V3.3.2) Daten von HSQLDB zu lesen, das ich bauen will und debug / lief mit Eclipse (V3.5.1), und es funktioniert gut.

Ich habe dann eine GWT (V1.7) Servlet-Web-App, kopiert meine Hibernate Klassen hinein, und fügte hinzu, die gleichen Benutzerbibliotheken Abhängigkeiten. Allerdings, wenn ich laufe das Servlet und versuchen, eine URL zuzugreifen, die meinen Code ruft ich dieses:

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152)
    at xxx.daoimpl.DAOSession.initialise(DAOSession.java:40)

wo DAOSession.java:40 ist:

AnnotationConfiguration config = new AnnotationConfiguration ();

für diesen Fehler googeln schlägt mir fehlt slf4j-api.jar aus dem Classpath, aber wenn ich für die Debug-Eigenschaften in der Befehlszeile aussehen kann ich dieses Glas siehe da:

C:\java\jsedk_6\jre\bin\javaw.exe
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:54541
-Xmx512m -Dfile.encoding=Cp1252
-classpath
    D:\dev\workspace\xxx\src;
    D:\dev\workspace\xxx\resources;
    D:\dev\workspace\xxx\war\WEB-INF\classes;
    C:\java\eclipse\plugins\com.google.gwt.eclipse.sdkbundle.win32_1.7.1.v200909221731\gwt-windows-1.7.1\gwt-user.jar;
    C:\java\eclipse\plugins\com.google.gwt.eclipse.sdkbundle.win32_1.7.1.v200909221731\gwt-windows-1.7.1\gwt-dev-windows.jar;
    C:\java\hibernate-annotations-3.4.0.GA\hibernate-annotations.jar;
    C:\java\hibernate-annotations-3.4.0.GA\lib\ejb3-persistence.jar;
    C:\java\hibernate-annotations-3.4.0.GA\lib\hibernate-commons-annotations.jar;
    C:\java\hibernate-distribution-3.3.2.GA\hibernate3.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\antlr-2.7.6.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\commons-collections-3.1.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\dom4j-1.6.1.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\javassist-3.9.0.GA.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\jta-1.1.jar;
    C:\java\hibernate-validator-4.0.1.GA\hibernate-validator-4.0.1.GA.jar;
    C:\java\hibernate-validator-4.0.1.GA\lib\validation-api-1.0.0.GA.jar;
    C:\java\hibernate-validator-4.0.1.GA\lib\log4j-1.2.14.jar;
    C:\java\hsqldb\lib\hsqldb.jar;
    C:\java\restlet-jse-2.0m5\lib\org.restlet.jar;
    C:\java\restlet-jee-2.0m5\lib\org.restlet.ext.servlet.jar;
    C:\java\restlet-jse-2.0m5\lib\org.restlet.ext.xml.jar;
    C:\java\slf4j-1.5.8\slf4j-api-1.5.8.jar;
    C:\java\slf4j-1.5.8\slf4j-log4j12-1.5.8.jar
    com.google.gwt.dev.HostedMode
    ...

Wenn ich das Glas öffne ich die LoggerFactory Klasse dort sehen kann.

Jede Idee, warum ist es nicht von den Klassenlader gefunden werden?

Bearbeiten. 1: Wenn versuchen org.slf4j.LoggerFactory von meinem Code für den Zugriff auf Eclipse kompiliert es in Ordnung, aber ich bekomme die gleichen Fehler zur Laufzeit

Edit 2: Wenn ich eine Test-Klasse mit einem Haupt hinzufügen, die den gleichen Code aufruft und führen Sie es, es funktioniert. Also das Classpath Problem scheint spezifisch für das Servlet.

Danke, jon

War es hilfreich?

Lösung

Es scheint, dass das Kopieren der beiden slf4j Gläser in den Krieg / WEB-INF / lib Teilprojekt / dir das Problem behoben. Ich bin nicht wirklich sicher, warum ich brauche sollte dies für diese beiden Gläser zu tun und nicht für alle anderen Hibernate, Restlet etc Gläser, die das Projekt auch verwendet, obwohl ich für Konsistenz Angenommen, ich tun das sowieso - ich denke, es wird machen Bereitstellung einfacher als gut.

Wenn jemand irgendeine Art von Erklärung liefern, warum dies funktioniert und warum genau ich es tun müssen, ich werde wählen Sie es als die „richtige“ Antwort, sonst wählen i diese.

Andere Tipps

Können Sie bitte bestätigen, dass Sie mindestens zwei slf4j.jar Dateien im Classpath haben, die slf4j-api.jar und genau eine Implementierung, wie slf4j-jdk14.jar?

Sie müssen nicht mehrere sflj4-Implementierungen in der Classpath haben.

Sie haben eine Laufzeit Abhängigkeitsproblem so alles in Ordnung kompiliert aber die Abhängigkeit ist in Ihrer Gläser. Sie müssen die Hibernate-Website und sehen Sie die Kompatibilität Matrix besuchen und stellen Sie sicher sind Sie abgestimmt überprüfen korrekt dann die Abhängigkeiten für Anmerkungen und Kern. Sie LOG4J Gläser sehen gut aus, so ist es auf jeden Fall einige Marotte.

Wenn es funktioniert in Eclipse dann ist es logisch definitiv einige diff zwischen dem 2 Runtimes (Eclipse und nicht-Eklipse), wenn die Matrix fein auscheckt dann sehen, ob Sie die Gemeinsamkeiten in den 2-Faktor aus können dann die Unterschiede erarbeiten - - Ihre Antwort sollte drin sein.

Ich hatte ein ähnliches Problem, außer ich Tomcat wurde mit und die NoClassDefFound Fehler war im Juli Logger. Ich reparierte sie durch die Tomcat Abhängigkeiten von meinem Classpath zu entfernen, wenn im Host-Modus ausgeführt wird, da Host-Modus einen Tomcat-Server einbettet, die in Konflikt wurde. So würde ich sehen, was passiert, wenn Sie einige oder alle der Restlet Gläser aus Classpath entfernen, um zu sehen, wenn sie Konflikte.

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