У меня есть приложение Java (6), которое использует Hibernate (V3.3.2) для чтения данных из HSQLDB, которые я собираю и отлаживаю/запускаю с помощью Eclipse (V3.5.1) и он отлично работает.Hibernate in Servlet вызываетNoClassDefFoundError: org/slf4j/LoggerFactory
Затем я создал веб-приложение GWT (V1.7) сервлета, скопировал в него свои классы спящего режима и добавил те же зависимости от пользовательских библиотек. Однако, когда я запустить сервлет и попытаться получить доступ к URL, который вызывающее моему код я получаю это:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152)
at xxx.daoimpl.DAOSession.initialise(DAOSession.java:40)
где DAOSession.java:40 является:
AnnotationConfiguration config = new AnnotationConfiguration();
погуглить эту ошибку говорит мне не хватает SLF4J-api.jar из пути к классам, однако, если я смотрю в командной строке для свойств отладки я могу увидеть эту баночку там:
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
...
Если я открыть банку я могу увидеть класс LoggerFactory там.
Любая идея, почему он не найден загрузчиком классов?
Редактировать 1: Если вы попытаетесь получить доступ к org.slf4j.LoggerFactory из моего кода, Eclipse скомпилирует его в порядке, но я получаю ту же ошибку во время выполнения.
Редактировать 2: Если я добавлю тестовый класс с основным, который вызывает тот же код и запускает его, он работает. Таким образом, эта проблема с classpath кажется специфичной для Servlet.
спасибо, джон
Я хотел бы посмотреть, как выглядит ваш классный путь. Я подозреваю, что встроенный Tomcat GWT не нашел банки, потому что они были ниже (после) в пути к классам или потому, что сервер-реселлер вмешивался, но когда вы помещали их в web-inf/lib, они теперь были выше (после) или переопределить материал для перезапуска. –
У меня была точно такая же проблема, и я сделал это, и это сработало. Спасибо! – Ricket
У меня была такая же проблема, и это сработало, у кого-то есть объяснение? –