Gson类通过Maven导入,在部署到JSP和Servlet Java Web时找不到。

huangapple go评论104阅读模式
英文:

Gson Class Imported by Maven is Not Found When Deployed on JSP and Servlet Java Web

问题

我通过Maven导入了Gson,其代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>HerbTea</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
  10. <dependencies>
  11. <dependency>
  12. <groupId>com.google.code.gson</groupId>
  13. <artifactId>gson</artifactId>
  14. <version>2.8.5</version>
  15. </dependency>
  16. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
  17. <dependency>
  18. <groupId>org.junit.jupiter</groupId>
  19. <artifactId>junit-jupiter-api</artifactId>
  20. <version>5.4.0</version>
  21. <scope>test</scope>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.junit.jupiter</groupId>
  25. <artifactId>junit-jupiter-api</artifactId>
  26. <version>5.4.0</version>
  27. <scope>compile</scope>
  28. </dependency>
  29. </dependencies>
  30. </project>

然而,当我在JSP Servlet程序上运行我的程序时,我收到以下错误:

  1. java.lang.NoClassDefFoundError: com/google/gson/Gson

我不知道为什么会出现这个错误。您可以在这里查看错误报告:链接

HTTP状态500 – 内部服务器错误


类型异常报告
消息处理[/outcome.jsp]中的异常在第[21]行发生了异常
描述服务器遇到了一个意外情况,阻止了它完成请求。
异常
org.apache.jasper.JasperException:在第[21]行处处理[/outcome.jsp]中的异常

  1. 18: <% WindowDisplay windowDisplay = (WindowDisplay) request.getSession().getAttribute("windowDisplay");
  2. 19: System.out.println(session.getAttribute(reqSymptomParamKey));
  3. 20: windowDisplay.getRecipeDisplay();
  4. 21: List<Recipe> a = windowDisplay.getRecipeDisplay().retrieveCorrespondingRecipe((List<String>) session.getAttribute(reqSymptomParamKey));
  5. 22: for (Recipe i : windowDisplay.getRecipeDisplay().retrieveCorrespondingRecipe((List<String>) session.getAttribute(reqSymptomParamKey))) {%>
  6. 23: <p1>name:<%=i.getName()%> </p1>
  7. 24: <p1>Corresponding Symptom: <%=i.getSymptomNameList()%></p1>

堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.web.servlet.ServerServlet.doPost(ServerServlet.java:60)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
javax.servlet.ServletException:java.lang.NoClassDefFoundError:com/google/gson/Gson
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
org.apache.jsp.outcome_jsp._jspService(outcome_jsp.java:178)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.web.servlet.ServerServlet.doPost(ServerServlet.java:60)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
java.lang.NoClassDefFoundError:com/google/gson/Gson

根据调试器的信息,问题发生在以下行,因为找不到Gson包中的任何类:

  1. GsonBuilder gsonBuilder = new GsonBuilder();

有人可以帮助我解决这个java.lang.NoClassDefFoundError:com/google/gson/Gson问题吗?

英文:

I imported Gson through maven whose code is

  1. &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  2. &lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
  3. xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  4. xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
  5. &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  6. &lt;groupId&gt;org.example&lt;/groupId&gt;
  7. &lt;artifactId&gt;HerbTea&lt;/artifactId&gt;
  8. &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  9. &lt;!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --&gt;
  10. &lt;dependencies&gt;
  11. &lt;dependency&gt;
  12. &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
  13. &lt;artifactId&gt;gson&lt;/artifactId&gt;
  14. &lt;version&gt;2.8.5&lt;/version&gt;
  15. &lt;/dependency&gt;
  16. &lt;!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --&gt;
  17. &lt;dependency&gt;
  18. &lt;groupId&gt;org.junit.jupiter&lt;/groupId&gt;
  19. &lt;artifactId&gt;junit-jupiter-api&lt;/artifactId&gt;
  20. &lt;version&gt;5.4.0&lt;/version&gt;
  21. &lt;scope&gt;test&lt;/scope&gt;
  22. &lt;/dependency&gt;
  23. &lt;dependency&gt;
  24. &lt;groupId&gt;org.junit.jupiter&lt;/groupId&gt;
  25. &lt;artifactId&gt;junit-jupiter-api&lt;/artifactId&gt;
  26. &lt;version&gt;5.4.0&lt;/version&gt;
  27. &lt;scope&gt;compile&lt;/scope&gt;
  28. &lt;/dependency&gt;
  29. &lt;/dependencies&gt;
  30. &lt;/project&gt;

However, when I run my program on JSP sevlet program, I receive

  1. java.lang.NoClassDefFoundError: com/google/gson/Gson

and I don't know why.

You can see the error report here

  1. HTTP Status 500 Internal Server Error
  2. ________________________________________
  3. Type Exception Report
  4. Message An exception occurred processing [/outcome.jsp] at line [21]
  5. Description The server encountered an unexpected condition that prevented it from fulfilling the request.
  6. Exception
  7. org.apache.jasper.JasperException: An exception occurred processing [/outcome.jsp] at line [21]
  8. 18: &lt;% WindowDisplay windowDisplay = (WindowDisplay) request.getSession().getAttribute(&quot;windowDisplay&quot;);
  9. 19: System.out.println(session.getAttribute(reqSymptomParamKey));
  10. 20: windowDisplay.getRecipeDisplay();
  11. 21: List&lt;Recipe&gt; a = windowDisplay.getRecipeDisplay().retrieveCorrespondingRecipe((List&lt;String&gt;) session.getAttribute(reqSymptomParamKey));
  12. 22: for (Recipe i : windowDisplay.getRecipeDisplay().retrieveCorrespondingRecipe((List&lt;String&gt;) session.getAttribute(reqSymptomParamKey))) {%&gt;
  13. 23: &lt;p1&gt;name:&lt;%=i.getName()%&gt; &lt;/p1&gt;
  14. 24: &lt;p1&gt;Corresponding Symptom: &lt;%=i.getSymptomNameList()%&gt;&lt;/p1&gt;
  15. Stacktrace:
  16. org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617)
  17. org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499)
  18. org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
  19. org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
  20. javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  21. org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  22. com.web.servlet.ServerServlet.doPost(ServerServlet.java:60)
  23. javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
  24. javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  25. org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  26. Root Cause
  27. javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/google/gson/Gson
  28. org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
  29. org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
  30. org.apache.jsp.outcome_jsp._jspService(outcome_jsp.java:178)
  31. org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
  32. javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  33. org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
  34. org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
  35. org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
  36. javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  37. org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  38. com.web.servlet.ServerServlet.doPost(ServerServlet.java:60)
  39. javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
  40. javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  41. org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  42. Root Cause
  43. java.lang.NoClassDefFoundError: com/google/gson/Gson

The line where the problem occurs according to debugger is this one because any class in Gson package is not found:

  1. GsonBuilder gsonBuilder = new GsonBuilder();

Can somebody help me to get over this java.lang.NoClassDefFoundError: com/google/gson/Gson problem?

答案1

得分: 0

我最终自己找到了问题的答案。感谢那些帮助我编辑问题的人。

问题是我没有将Maven库添加到构件中。

解决方法是进入Intellij中的项目结构->构件->输出布局,然后在“可用元素”面板下点击相应的Maven导入的jar,将Gson库的jar添加到构件中。

英文:

I found out the question answer myself eventually. Thanks for those helping me in editing the question.

The problem is that I didn't add the Maven libaray into the artifact.

The solution will be going into Project Structure->Artifacts->Output layout in Intellij and click on the corresponding Maven imported jar under the "Available Elements" panel to add that Gson libaray jar into the artifact.

huangapple
  • 本文由 发表于 2020年7月30日 22:38:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/63175516.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定