【问题标题】:java.lang.ClassNotFoundException: com.google.gson.Gson despite having the JAR in the Apache serverjava.lang.ClassNotFoundException: com.google.gson.Gson 尽管 Apache 服务器中有 JAR
【发布时间】:2014-09-24 01:05:40
【问题描述】:

阅读有关 Stackoverflow 上相同错误的许多帖子。 但我仍然收到以下错误(Stacktrace):

Jul 31, 2014 3:08:54 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet TEST_Authenticate threw exception
java.lang.ClassNotFoundException: com.google.gson.Gson
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at TEST_Authenticate.doGet(TEST_Authenticate.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:744)

我的代码中的第 70 行如下:

out.println(new Gson().toJson(TESTAuthenticate("myemail@mydomain.com")));

我正在使用 Netbeans,这是我的项目的结构。

我已将 JAR 包含在我的服务器 lib 文件夹中,如上图所示。

有人在this post 中回答“您是否将 jar 添加到您的 webapp 的 /WEB-INF/lib 文件夹中?”,但是,我没有在 WEB-INF 中看到 lib 文件夹,如上图。我想知道我做错了什么?

更新了显示gson-2.2.4.jar的新屏幕截图

【问题讨论】:

  • 你检查过netbeans中有多少个tomcat吗?
  • @MingtaoCraigZhang 在Services 选项卡下,我看到只有一个apache tomcat 列出,就像上图中提到的一样。你问的是这个吗?
  • 您为什么要询问多个 tomcat。请详细说明。

标签: java servlets gson classnotfoundexception


【解决方案1】:

我从未使用过 NetBeans,但我认为您必须区分 Tomcat 引擎本身的内部类路径和应用程序的类路径。 Tomcat 将其分开,因此 Web 应用程序不需要使用 Tomcat 使用的相同版本的库。 难道没有另一种方法可以使用 gson 库定义项目的依赖关系吗? F.e.使用maven依赖并生成项目文件。

我注意到的第二件事: gson-2.2.4-javadoc.jar 的内容是什么?它是包含类还是只包含 javadoc html 文件。

通常在构建 war 文件时(使用 maven),这些依赖项将添加到生成的 .war 文件中的 WEB-INF/lib 文件夹中。

【讨论】:

  • 这就是我直接在我的apache Tomcatlib 文件夹中添加gson-2.2.4-javadoc.jar 的原因,而不是在我的Web 项目的Libraries 部分中添加它。回答你的第二个问题:当我展开gson-2.2.4-javadoc.jar-->com.google.gson 时,我看到那里列出了所有HTML 文件,这有什么区别吗?可能我需要在那里上课吗?
  • 你肯定需要另一个 jar 和类。我想它会有一个像 gson-2.2.4.jar 的名字
  • 嗯,让我看看我是否可以找到包含类的 JAr,而不是包含 html 文件。
  • 我已经有了那个 JAR。我已在我的问题中更新了旧屏幕下方的正确屏幕截图。请看一下。它包含所有的类。这是我在上一张图片中展开的 doc JAR。
  • 如果构建war文件,它的WEB-INF/lib文件夹中是否包含gson-2.2.4.jar?
猜你喜欢
  • 2014-10-24
  • 2021-11-02
  • 2023-03-24
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2017-08-03
  • 2023-03-23
  • 2017-01-05
相关资源
最近更新 更多