gpt4 book ai didi

java - SLF4J 类未找到异常

转载 作者:行者123 更新时间:2023-12-01 11:57:14 25 4
gpt4 key购买 nike

我想在 Java servlet 中运行 UADetector,但收到错误:

java.lang.NoClassDefFoundError: net/sf/uadetector/service/UADetectorServiceFactory
test.doGet(test.java:158)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

但是,我已将 jar 文件添加到我的库中,并且在项目文件夹中看到它们(我使用 Eclipse)。

这是我的代码:

import java.lang.*;
import java.io.IOException;
import java.io.*;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

import net.sf.uadetector.service.UADetectorServiceFactory;
import net.sf.uadetector.UserAgent;
import net.sf.uadetector.UserAgentStringParser;
import net.sf.uadetector.ReadableUserAgent;


/**
* Servlet implementation class test
*/
@WebServlet("/test")
public class test extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);

PrintWriter out = response.getWriter();

// Get an UserAgentStringParser and analyze the requesting client
UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser();
ReadableUserAgent agent = parser.parse(request.getHeader("User-Agent"));

out.append("You're a <em>");
out.append(agent.getName());
out.append("</em> on <em>");
out.append(agent.getOperatingSystem().getName());
out.append("</em>!");
}

}

其他人也遇到过这个问题吗?

编辑:将 jar 放入 WEB-INF/lib 文件夹后,错误已更改为:

exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


root cause
java.lang.NoClassDefFoundError: net/sf/uadetector/service/UADetectorServiceFactory
test.doGet(test.java:158)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause
java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
net.sf.uadetector.datareader.XmlDataReader.<clinit>(XmlDataReader.java:85)
net.sf.uadetector.service.UADetectorServiceFactory$ResourceModuleXmlDataStore.<clinit>(UADetectorServiceFactory.java:62)
net.sf.uadetector.service.UADetectorServiceFactory.<clinit>(UADetectorServiceFactory.java:92)
test.doGet(test.java:158)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

编辑2:看来我需要更具体地说明如何添加 jar 文件。

我转到文件 -> 属性 -> java 构建路径 -> “添加外部 JAR”

这也适用于我的其他 jar(如 mysql-connector-java)

编辑3:因此编译和运行时的类路径可以不同。我不知道哪些 jar 是运行时必需的,哪些仅用于编译。所以我复制了 WEB-INF/lib 文件夹中也使用的所有 jar。在部署程序集中,我有以下内容:

来源

  • /src
  • /WebContent

部署路径

  • /WEB-INF/类
  • /

WEB-INF 位于 WebContent 中,所以我认为这应该是正确的。

但是为什么类:org.slf4j.LoggerFactory 丢失了?

最佳答案

您在项目中的哪个位置添加了库?他们需要位于 WEB-INF/lib/与您的应用程序一起部署到应用程序服务器并在运行时位于 CLASSPATH 中的目录。请注意,运行时 CLASSPATH 可能与用于编译的 CLASSPATH 非常不同。

<小时/><小时/>

I go to File -> properties -> java build path -> "Add External JARs"

不要那样做。这设置了用于编译的 CLASSPATH,但并不使库在运行时在 JavaEE 容器中可用。对于您不在团队中工作的 Java SE 项目来说是可以的(或者团队中的每个人在其计算机上都有相同的路径),但不能很好地与 Java EE 配合使用。

因为,在您的部署程序集中,项目中名为“WebContent”的目录成为已部署的 JAR/WAR 的根目录,因此将库 jar 文件复制到 WebContent/WEB-INF/lib/ 。然后,当您的应用程序部署时,它将包含这些库,并且它们将位于 JavaEE 规范需要它们的位置。

关于java - SLF4J 类未找到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com