gpt4 book ai didi

java - Servlet 中的 hibernate 导致 NoClassDefFoundError : org/slf4j/LoggerFactory

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:18 26 4
gpt4 key购买 nike

我有一个 Java (6) 应用程序,它使用 Hibernate (V3.3.2) 从 HSQLDB 读取数据,我使用 Eclipse (V3.5.1) 构建和调试/运行它,它工作正常。

然后我创建了一个 GWT (V1.7) Servlet 网络应用程序,将我的 hibernate 类复制到其中,并添加了相同的用户库依赖项。但是,当我运行 servlet 并尝试访问调用我的代码的 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,但是如果我查看调试属性的命令行,我可以在那里看到这个 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
...

如果我打开 jar ,我可以看到里面的 LoggerFactory 类。

知道为什么它没有被类加载器找到吗?

编辑 1:如果尝试从我的代码访问 org.slf4j.LoggerFactory,Eclipse 可以编译它,但我在运行时遇到同样的错误。

编辑 2: 如果我添加一个带有调用相同代码的 main 的测试类并运行它,它就可以工作。所以这个类路径问题似乎特定于 Servlet。

谢谢,乔恩

最佳答案

似乎将两个 slf4j jar 复制到 war/WEB-INF/lib 子项目/目录解决了这个问题。我不太确定为什么我需要为这两个 jar 而不是该项目也使用的所有其他 Hibernate、ReSTLet 等 jar 做这件事,尽管我想为了保持一致性我还是会这样做——我想它会让部署也更容易。

如果有人可以提供某种解释来解释为什么这行得通以及为什么我需要这样做,我会选择它作为“正确”答案,否则我会选择这个。

关于java - Servlet 中的 hibernate 导致 NoClassDefFoundError : org/slf4j/LoggerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com