当我尝试运行项目时,我在Eclipse中收到NoClassDefFoundError
。
我的项目如下:
JavaProject: BulkAdmin
- src
- com.mycompany.bulkadmin.SDK.util
- Login.java
Dynamic Web Project: JSPTesting
- src
- com.mycompany.bulkadmin.jspController
- Controller.java
- WebContent
- index.html
- execute.jsp
这是控制流程:
Controller.java使用Login.java。我收到了编译错误。要解决它们,我这样做了:
我不确定为什么,但现在当我得到NoClassDefFoundError
时。我做了一些谷歌搜索。我认为这意味着我以某种方式弄乱了我的类路径,但我不知道如何解决这个问题。
java.lang.NoClassDefFoundError: com/myCompany/bulkadmin/SDK/util/Login
at com.myCompany.bulkadmin.jspController.Controller.process(Controller.java:44)
at org.apache.jsp.execute_jsp._jspService(execute_jsp.java:63)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:321)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:257)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
其他信息:
在SO上似乎有很多类似的问题。我已经阅读了其中的15个,并尝试了各种各样的东西,但我认为我的问题有不同的解决方案。我可以提供更多信息。
答案 0 :(得分:23)
右键单击您的动态Web项目,转到属性>部署程序集并在那里添加依赖项目。通过这种方式,它们最终将成为/WEB-INF/lib
中的JAR,正好在您希望的位置。
在早于3.5的Eclipse版本中,您需要转到属性> Java EE模块依赖性。
答案 1 :(得分:2)
NoClassDefFoundError
表示编译期间可用的类在运行时不再可用。您的问题是com/myCompany/bulkadmin/cSDK/util/Login
类在编译类路径中可用(在Eclipse中通过您添加到构建路径的Project引用),但不在运行时类路径中(Tomcat,它不知道如何查找此类)
在Tomcat上部署时,您需要将BulkAdmin
项目添加到web-app类路径。
执行此操作的一种方法是将BulkAdmin
项目导出为JAR,并将其放入WEB-INF/lib
项目的JSPTesting
目录中。