Java类通常自行编译,但在通过JSP运行时抛出NoClassFoundException或NoClassDefFoundError

Java类通常自行编译,但在通过JSP运行时抛出NoClassFoundException或NoClassDefFoundError,java,android,firebase,jsp,tomcat,Java,Android,Firebase,Jsp,Tomcat,我有一个java类,它成功地将Firebase消息发送到我的android手机。我试图从JSP文件运行该类,但它会导致NoClassFoundException和NoClassDefFoundError。 以下是JSP文件: <%@ page import="send.Notify" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head>

我有一个java类,它成功地将Firebase消息发送到我的android手机。我试图从JSP文件运行该类,但它会导致NoClassFoundException和NoClassDefFoundError。 以下是JSP文件:

<%@ page import="send.Notify" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    Api token is: <%
        out.print(request.getParameter("token"));
    %>
<%

Notify.SendMessage(request.getParameter("token"),"title","body");
%>
</body>
</html>
以下是错误:

Type Exception Report

Message An exception occurred processing [/notification.jsp] at line [15]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: An exception occurred processing [/notification.jsp] at line [15]

12:         /*Notify.SendMessage("f7neXi6q4KQ:APA91bFI3acBwgtDq99_D2duax_qY1zAMGCE62yHQ5CsL-UhyJdvAs97CUhzXzY0q7tyWKX2JM0WlyvZtL-arTW9s1useO816ujda5c4gYKM-I_uCN8m81EH9clwNeVG6kQzGU-zl93k",
13:                 "jsp title", "jsp body");*/
14:         try{
15:             Notify.SendMessage(request.getParameter("token"),"title","body");
16:         }catch (Exception e){
17:             out.print("error!");
18:         }


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:593)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/google/firebase/FirebaseOptions$Builder
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:667)
    org.apache.jsp.notification_jsp._jspService(notification_jsp.java:154)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.NoClassDefFoundError: com/google/firebase/FirebaseOptions$Builder
    send.Notify.SendMessage(Notify.java:26)
    org.apache.jsp.notification_jsp._jspService(notification_jsp.java:135)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.ClassNotFoundException: com.google.firebase.FirebaseOptions$Builder
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1292)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1121)
    send.Notify.SendMessage(Notify.java:26)
    org.apache.jsp.notification_jsp._jspService(notification_jsp.java:135)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
以下是我的文件夹结构: 问题在于Intellij不使用您添加到项目中的依赖项,也不使用添加到tomcat服务器中的依赖项。为了解决这个问题,我手动将maven文件夹(C:\Users\user.m2)中的所有JAR添加到project/web/web-INF/lib文件夹中

这是一个解决方案,但我仍在寻找正确的方法


更新:我最近试图重构我的程序。在IntelliJ中,从ApacheWebApp原型创建一个新的maven项目。然后您可以添加所有依赖项和类,Tomcat将成功地找到它们。

类路径中缺少
firebase core
jar。firebase的文档包含gradle的说明

依赖项{
实现'com.google.firebase:firebase核心:16.0.1'
}

如果您使用的是maven,请使用适当的maven声明替换依赖项


com.google.firebase
火基堆芯
16.0.1

Type Exception Report

Message An exception occurred processing [/notification.jsp] at line [15]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: An exception occurred processing [/notification.jsp] at line [15]

12:         /*Notify.SendMessage("f7neXi6q4KQ:APA91bFI3acBwgtDq99_D2duax_qY1zAMGCE62yHQ5CsL-UhyJdvAs97CUhzXzY0q7tyWKX2JM0WlyvZtL-arTW9s1useO816ujda5c4gYKM-I_uCN8m81EH9clwNeVG6kQzGU-zl93k",
13:                 "jsp title", "jsp body");*/
14:         try{
15:             Notify.SendMessage(request.getParameter("token"),"title","body");
16:         }catch (Exception e){
17:             out.print("error!");
18:         }


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:593)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/google/firebase/FirebaseOptions$Builder
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:667)
    org.apache.jsp.notification_jsp._jspService(notification_jsp.java:154)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.NoClassDefFoundError: com/google/firebase/FirebaseOptions$Builder
    send.Notify.SendMessage(Notify.java:26)
    org.apache.jsp.notification_jsp._jspService(notification_jsp.java:135)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.ClassNotFoundException: com.google.firebase.FirebaseOptions$Builder
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1292)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1121)
    send.Notify.SendMessage(Notify.java:26)
    org.apache.jsp.notification_jsp._jspService(notification_jsp.java:135)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    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:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.