在Eclipse中更改包名后的ClassNotFoundException

时间:2014-03-21 23:53:19

标签: java eclipse java-ee runtime-error classnotfoundexception

我正在Eclipse中开发Java Dynamic Web Project。一切都运行得很顺利,直到我意识到我的包名是大写的,并决定改变它们。

更改后,我在运行时获取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:Model / Converter     db.UserHelper。(UserHelper.java:34)     Controllers.LoginServlet(LoginServlet.java:36)     sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)     sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)     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(Unknown Source)     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(未知来源)

这是我的文件夹结构的屏幕截图:

http://imgur.com/VJvJbeb

src / Controllers和src / Model是我切换到小写的软件包。我把它们换回来希望解决这个问题,但无济于事。

我尝试通过Run - >检查项目的运行时类路径。运行配置,但该项目未列在那里。

以下是我的Web部署程序集的快照:

http://imgur.com/D0rg2aZ

有谁知道如何解决这个问题?任何帮助将不胜感激。

找到解决方案

感谢大家的回复。谢天谢地,我设法解决了这个问题:

  1. 右键单击项目文件夹--->构建路径--->配置构建路径
  2. 导航到“来源”标签
  3. 我看到默认的输出文件夹是" WorkTicketSystem / build / classes。"我将其切换为" WorkTicketSystem / WebContent / WEB-INF / classes。"
  4. 而且,瞧。我不完全确定我的行为为什么或如何解决问题,但如果有人能够解释我会非常有兴趣听到它。现在我很高兴它运行起来。

2 个答案:

答案 0 :(得分:0)

在web.xml中,您可以引用Model.Converter类。您需要将其更改为model.Converter。

答案 1 :(得分:0)

如果我们将包名更改为大写,我们必须检查是否所有带有该包的引用都被修改。正如你所说,如果你尝试运行小写的包名称工作正常。如果您尝试使用IDE修改包名称,也会要求更新引用。检查一下。

注意: * 根据java编码标准,软件包名称应为小写。 *