【发布时间】:2014-03-21 23:53:18
【问题描述】:
我正在 Eclipse 中开发一个 Java 动态 Web 项目。一切都很顺利,直到我意识到我的包名是大写的,并决定更改它们。
更改它们后,我在运行时收到 ClassNotFoundExceptions。代码编译得很好。据我了解,这是一个运行时类路径问题。
错误显示在这里:
javax.servlet.ServletException:实例化 servlet 类时出错 Controllers.LoginServlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) java.lang.Thread.run(未知来源)
根本原因
java.lang.NoClassDefFoundError: 模型/转换器 db.UserHelper.(UserHelper.java:34) Controllers.LoginServlet.(LoginServlet.java:36) sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)java.lang.reflect.Constructor.newInstance(未知来源) java.lang.Class.newInstance(未知来源) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) java.lang.Thread.run(未知来源)
根本原因
java.lang.ClassNotFoundException: Model.Converter org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) db.UserHelper.(UserHelper.java:34) Controllers.LoginServlet.(LoginServlet.java:36) sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)java.lang.reflect.Constructor.newInstance(未知来源) java.lang.Class.newInstance(未知来源) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) java.lang.Thread.run(未知来源)
这是我的文件夹结构的截图:
src/Controllers 和 src/Model 是我改用小写的包。我把他们换回来希望能解决问题,但无济于事。
我尝试通过转到运行 --> 运行配置来检查项目的运行时类路径,但该项目未在此处列出。
这是我的 Web 部署程序集的快照:
有谁知道我该如何解决这个问题?任何帮助将不胜感激。
找到解决方案
感谢大家的回复。谢天谢地,我设法通过以下方式解决了这个问题:
- 右键项目文件夹--->构建路径--->配置构建路径
- 导航到“源”选项卡
- 我看到默认输出文件夹是“WorkTicketSystem/build/classes”。我将其切换为“WorkTicketSystem/WebContent/WEB-INF/classes”。
而且,瞧。我不确定我的行为为什么或如何解决了这个问题,但如果有人能解释一下,我会很想听听。现在我很高兴它运行。
【问题讨论】:
-
让我猜猜。窗户?
-
我在 Eclipse 中遇到的大多数类似问题都是由于它发布资源的方式,通常通过在“服务器”视图中右键单击配置的服务器并选择“清理”来解决
-
您能发布您的 web.xml 文件的内容吗?我怀疑你有一个完全限定的类名,指的是你的旧包名。
-
我实际上没有这个项目的 web.xml 文件。我编辑了我的帖子,以展示我是如何设法解决这个问题的。感谢您的回复!
-
呃,错误说找不到类“Model.Converter”。这意味着您在某处引用“Model.Converter”而不是“model.Converter”。
标签: java eclipse jakarta-ee runtime-error classnotfoundexception