【问题标题】:NoClassDefFoundError when using a class from a jar file使用 jar 文件中的类时出现 NoClassDefFoundError
【发布时间】:2012-06-28 15:18:58
【问题描述】:

我正在尝试运行一个搜索 Web 应用程序,并且需要使用另一个 Java 项目来执行所有后端操作。我将项目导出到一个 jar 文件中,并将其添加到我的动态 webapp 项目中。我尝试的第一件事是“属性”>“Java 构建路径”中的“添加外部 jars”。这不起作用,所以我也尝试在 WEB-INF/lib 中添加 jar,但它也不起作用。如何正确添加 jar 文件以便我可以在我的 web 应用程序中使用该项目?

更具体地说,这是我得到的错误:

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

根本原因

java.lang.NoClassDefFoundError: org/apache/accumulo/core/client/Instance
com.afspq.model.Results.getResults(Results.java:46)
com.afspq.web.ProcessQuery.doGet(ProcessQuery.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.ClassNotFoundException: org.apache.accumulo.core.client.Instance
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
com.afspq.model.Results.getResults(Results.java:46)
com.afspq.web.ProcessQuery.doGet(ProcessQuery.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

注意 Apache Tomcat/6.0.35 日志中提供了根本原因的完整堆栈跟踪。

【问题讨论】:

  • 这只会给您运行时错误吗?
  • 是的,这是一个运行时错误。此外,在“问题”选项卡中有一条消息说:Classpath entry path/to/my/jar will not be exported or published. Runtime ClassNotFoundExceptions may result.
  • 在将 jar 添加到 lib 文件夹后,您是否从构建路径中删除了该 jar?
  • @user1454749 是的,我在将构建路径添加到 lib 文件夹后将其从构建路径中删除。
  • @BlackVegetable 我正在使用 Eclipse 3.7.2 和 Tomcat。

标签: jsp jakarta-ee servlets maven


【解决方案1】:

我会将以下内容添加到您的 Maven pom.xml 文件中:

<dependency>
    <groupId>org.apache.accumulo</groupId>
    <artifactId>accumulo-core</artifactId>
    <version>1.4.0</version>
</dependency>

而不是在 Eclipse 中添加它。 pom.xml 是事实而不是 Eclipse。

在命令行检查一切是否正确:

mvn clean package

将创建好的war部署到tomcat中,确保一切正常。

【讨论】:

  • 不幸的是,堆栈跟踪说明了一些不同的内容。没有你的 pom 就很难了!
【解决方案2】:

这是一个痛苦的过程,但我不得不手动添加来自 Accumulo、Hadoop 和 Zookeeper 的所有 jar 文件。我不得不将 jar 文件添加到两个位置。一个是构建路径(右键单击 Web 项目 > 属性 > Java 构建路径 > 添加外部 jars),另一个是我的 Web 项目中的 WebContent/WEB-INF/lib 文件夹。这为我修好了。出于某种原因,Maven 没有添加依赖项,尽管它们都在我的 pom.xml 中指定。

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多