我想在Java中使用Jodd库,因为我想尝试Jerry。
为此,我包含了库,如this question的答案所示,并使用了以下代码:
File file = new File(SystemUtil.getTempDir(), "test.html");
NetUtil.downloadFile("http://de.wikipedia.org/wiki/Toastbrot", file);
Jerry doc = Jerry.jerry(FileUtil.readString(file));
执行此代码会产生以下错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at jodd.lagarto.LagartoParserEngine.<clinit>(LagartoParserEngine.java:22)
at jodd.jerry.Jerry$JerryParser.createLagartoDOMBuilder(Jerry.java:80)
at jodd.jerry.Jerry$JerryParser.<init>(Jerry.java:73)
at jodd.jerry.Jerry.jerry(Jerry.java:121)
at jodd.jerry.Jerry.jerry(Jerry.java:53)
at sla.htmlf.Main.test(Main.java:36)
at sla.htmlf.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)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
... 7 more
在sla.htmlf.Main.test(Main.java:36)
在sla.htmlf.Main.main(Main.java:19)上当然是指我项目的类
这是我第一次遇到NoClassDefFound异常。似乎缺少org.slf4j.LoggerFactory,但是如果我没记错的话,那是jodd库使用的东西-那应该放在那儿,对吗?
我真的很感谢一些建议/帮助
最佳答案
如您在download page上看到的,jodd-lagarto模块(Jerry所属)依赖于SLF4J日志记录库。
请阅读有关logging in Jodd的更多信息。在此页面上,您还可以找到一些快速步骤来设置环境并使之正常运行。
这些步骤是:
转到http://www.slf4j.org/download.html并下载SLF4J分发软件包。
将slf4j-api-X.X.X.jar放在类路径上
如果您不需要任何日志记录,只需将slf4j-nop-X.X.X.jar放在类路径中。
否则,请转到http://logback.qos.ch/download.html并下载LOGback分发软件包。
将logback-core.jar和logback-classic.jar放在类路径上。
使用SLF4J,您可以选择要使用的日志记录框架:none,log4j,commons等; Jodd作者推荐logback。