设置Quartz时java ClassNotFoundException LoggerFactory

设置Quartz时java ClassNotFoundException LoggerFactory,java,classpath,quartz-scheduler,classnotfoundexception,Java,Classpath,Quartz Scheduler,Classnotfoundexception,所以我使用的是石英罐:Quartz-all-2.0.1.jar。从自述文件来看,这个罐子应该已经设置好了一切。但是,当我尝试使用创建SchedulerFactory时 SchedulerFactory sf = new StdSchedulerFactory(); 我明白了: Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at org.quartz.impl.StdS

所以我使用的是石英罐:Quartz-all-2.0.1.jar。从自述文件来看,这个罐子应该已经设置好了一切。但是,当我尝试使用创建SchedulerFactory时

SchedulerFactory sf = new StdSchedulerFactory();
我明白了:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.quartz.impl.StdSchedulerFactory.<init>(StdSchedulerFactory.java:268)
    at WebScraper.Main.main(Main.java:19)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
线程“main”java.lang.NoClassDefFoundError中的异常:org/slf4j/LoggerFactory 位于org.quartz.impl.StdSchedulerFactory。(StdSchedulerFactory.java:268) 在WebScraper.Main.Main(Main.java:19) 原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory 在java.net.URLClassLoader$1.run(URLClassLoader.java:217) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:205) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:321) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:266)
我还感到困惑,因为在我尝试运行程序之前,Eclipse没有显示任何错误。感谢您的帮助。

文档中列出了石英,具体取决于slf4j。您可以下载slf4j并将其添加到类路径中。我不知道为什么在没有这个问题的情况下它可以在早期工作。

您将需要slf4j api jar和一个实现jar


至于为什么它在eclipse中没有抱怨。它只是一个运行时依赖项。您没有编译任何实际使用slf4j的代码,因此您的代码编译得很好。另一方面,当您尝试运行时,您所依赖的代码(即Quartz)对您现在必须提供的slf4j具有依赖性。

对于那些更熟悉maven的人,您可以将此依赖性添加到POM文件中:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

org.slf4j
slf4j-log4j12
1.5.6

然后将此库添加到项目依赖项中

slf4j下载有一堆.jar。我试着包括slf4j-ext-1.6.1.jar和slf4j-simple-1.6.1.jar,因为它们看起来最有前途。但我不知道使用哪一种是cannonical slf4j。我添加了slf4j-api-1.6.1.jar和slf4j-simple-1.6.1.jar使其工作。第一句话没有意义。应该读到Quartz依赖于slf4j。它显然使用了类查找。这意味着它并不直接依赖于它。它只取决于它是否在类路径中,因此当类装入器查找它时,它会找到它。它不需要类,所以以前从未尝试过加载它,但调度器确实调用类加载器并点击hissyfitville。