【问题标题】:NoClassDefFoundError in Eclipse when adding project in build path在构建路径中添加项目时 Eclipse 中的 NoClassDefFoundError
【发布时间】:2011-04-19 16:02:14
【问题描述】:

当我尝试运行我的项目时,我在 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. execute.jsp 获取表单中返回的信息并对 Login.java 进行静态调用
  4. execute.jsp 打印调用结果

Controller.java 使用 Login.java。我收到编译错误。为了解决它们,我这样做了:

  1. 右键单击 JSPTesting -> 属性
  2. 选择左侧栏的java构建路径
  3. 选择项目选项卡
  4. 点击添加
  5. 选择 BulkAdmin(项目)

我不知道为什么,但现在当我收到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 篇并尝试了各种方法,但我认为我的问题有不同的解决方案。我可以提供更多信息。

【问题讨论】:

    标签: eclipse exception


    【解决方案1】:

    右键单击您的动态 Web 项目,转到 Properties > Deployment Assembly 并在那里添加相关项目。这样,它们最终会在 /WEB-INF/lib 中以 JAR 形式出现,正是您想要的位置。

    在 Eclipse 3.5 之前的版本中,您需要转到 Properties > Java EE Module Dependencies

    另见:

    【讨论】:

    • 如果已配置,您可以删除部署路径,然后重新添加。它应该修复依赖关系。
    【解决方案2】:

    NoClassDefFoundError 表示在编译期间可用的类在运行时不再可用。您的问题是 com/myCompany/bulkadmin/cSDK/util/Login 类在编译类路径中可用(在 Eclipse 中通过您添加到构建路径的项目引用)但在运行时类路径中不可用(Tomcat,它不知道如何找到此类)。

    在 Tomcat 上部署时,您还需要将 BulkAdmin 项目添加到 web-app 类路径中。

    执行此操作的一种方法是将BulkAdmin 项目导出为JAR,并将其放入JSPTesting 项目的WEB-INF/lib 目录中。

    【讨论】:

    • 修正了错字。 (只是问题中的一个错字而不是实际代码)。
    • Eclipse 似乎与 tomcat/jsp 集成得很好。似乎很奇怪,没有内置机制在运行时也提供编译时的东西。
    • 查看@BalusC 的回答 - 我不知道 IDE 中的该功能 :)
    • +1 感谢您的帮助。我希望我也能接受你的回答。
    • 不用担心,很高兴为您提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多