在构建路径中添加项目时,Eclipse中的NoClassDefFoundError

时间:2011-04-19 16:02:15

标签: eclipse exception

当我尝试运行项目时,我在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

这是控制流程:

  1. index.html加载
  2. index.html有一个重定向到execute.jsp
  3. 的表单
  4. execute.jsp获取表单中返回的信息并对Login.java进行静态调用
  5. execute.jsp打印调用的结果
  6. Controller.java使用Login.java。我收到了编译错误。要解决它们,我这样做了:

    1. 右键单击JSPTesting - >特性
    2. 在左侧栏中选择“java构建路径”
    3. 选择项目标签
    4. 点击添加
    5. 选择BulkAdmin(项目)
    6. 我不确定为什么,但现在当我得到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)
      

      其他信息:

      • 我使用tomcat(在Eclipse中)作为我的服务器
      • 该异常显示在浏览器和eclipse控制台
      • execute.jsp是JSP

      在SO上似乎有很多类似的问题。我已经阅读了其中的15个,并尝试了各种各样的东西,但我认为我的问题有不同的解决方案。我可以提供更多信息。

2 个答案:

答案 0 :(得分:23)

右键单击您的动态Web项目,转到属性>部署程序集并在那里添加依赖项目。通过这种方式,它们最终将成为/WEB-INF/lib中的JAR,正好在您希望的位置。

Eclipse Project Properties Deployment Assembly

在早于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目录中。