java - ClassNotFoundException : org. slf4j.LoggerFactory Maven 问题

标签 java eclipse maven tomcat

我正在尝试在服务器上使用 tomcat 运行 .war 文件。每次我启动 tomcat 时,它都应该设置一个计时器,它每周运行一次 .war 文件的 init() 方法。我正在使用 Quartz 的 CronTrigger 来做这件事。 JobBuilder 调用类 HelloJob,其中(运行时)创建了一个巨大的 excel 表。

public class CronTrigger implements Servlet

{    
    public void init(ServletConfig arg0) throws ServletException {

        JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("Batch Validation Trigger", "group1").build();

        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("Batch Validation Trigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0 45 14 ? * TUE")).build();
        Logger root = (Logger)LoggerFactory.getLogger(CronTrigger.class);
        root.isDebugEnabled();
        //schedule it
        Scheduler scheduler = null;
        try {
            scheduler = new StdSchedulerFactory().getScheduler();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        try {
            scheduler.start();
        } catch (SchedulerException e1) {
            e1.printStackTrace();
        }
        try {
            scheduler.scheduleJob(job, trigger);
        } catch (SchedulerException e2) {
            e2.printStackTrace();
        }
    }
}    

我的 web.xml:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>WOQC</display-name>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
      <servlet>
    <servlet-name>CronTrigger</servlet-name>
    <servlet-class>timer.CronTrigger</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>CronTrigger</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

当我尝试运行它时,它返回一个错误和一个异常: NoClassDefFoundError:

SEVERE: StandardWrapper.Throwable
    java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at timer.CronTrigger.init(CronTrigger.java:48)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        ... 13 more

ClassNotFoundException:

SEVERE: Servlet /WO threw load() exception
java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at timer.CronTrigger.init(CronTrigger.java:48)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

我已经阅读了有关此异常的问题并将 slf4j-nop-1.7.7.jar 和 slf4j-api-1.7.7.jar 添加到类路径中。我知道问题出在 LoggerFactory 的实现上,但是我找不到很好的例子来解决我的问题。如果您有任何想法,请回复。

提前致谢!

最佳答案

当第三方库没有被 IDE 本身识别时,会提示 ClassNotFoundException。您应该将 jars 文件(第三方库)添加到 WEB-INF/lib 文件夹中。现在它应该可以正常工作了。

关于java - ClassNotFoundException : org. slf4j.LoggerFactory Maven 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161780/

相关文章:

java - Android TreeMap 蓝调......有其他选择吗?

java - 与数据库同步

java - eclipse 中的 JavaSE-18 与我安装的 jdk1.8.0_73 是什么

java - 如何为测试进行不同的 Hibernate 配置?

spring-boot - Spring Boot Maven 插件 > 2.4.x 构建镜像在 GitLab 注册表上发布

java - 在 hibernate 实体上调用 merge 会返回 Javassist 代理对象吗?

c++ - 尝试在 Eclipse 中运行程序时出现 "Error opening terminal: unknown."

android - 如何在eclipse中为android项目集成aar库依赖

maven - Jersey Web 应用程序的 Docker 镜像

java - 应用程序部署在 jboss 上,但当我尝试访问时出现 404 错误