我正在运行正常的Nutch索引,它曾经在2天前工作完美,但今天它无处不在它只是停止使用上一个错误。堆栈错误之后:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/retry/RetryCallback
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at org.apache.nutch.plugin.Extension.getExtensionInstance(Extension.java:161)
at org.apache.nutch.indexer.IndexWriters.<init>(IndexWriters.java:55)
at org.apache.nutch.indexer.IndexingJob.index(IndexingJob.java:121)
at org.apache.nutch.indexer.IndexingJob.run(IndexingJob.java:228)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.nutch.indexer.IndexingJob.main(IndexingJob.java:238)
Caused by: java.lang.ClassNotFoundException: org.springframework.retry.RetryCallback
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more
我最终看到错误发生在这段代码中:
Object object = extensionClazz.newInstance();
SO上的另一个question但是有不同的项目能够通过添加spring-framework-messaging依赖项来解决问题
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
我正在使用nutch版本1.12和ivy进行依赖关系管理,所以我的配置如下:
<dependency org="org.springframework.retry" name="spring-retry" rev="1.2.0.RELEASE">
<exclude module="spring-beans"/>
<exclude module="spring-context"/>
<exclude module="spring-core"/>
<exclude module="spring-aop"/>
</dependency>
即使添加了Spring-messaging依赖,它仍然无法正常工作。 有什么想法吗?
答案 0 :(得分:0)
当您的类路径中有多个版本的同一个jar(同一个类)时,可能会出现这类错误。您可以通过执行
来查看依赖关系树<report conf="compile" /> for ivy projects
并且
mvn dependency:tree for maven projects
缩小到您想要的版本,您可以通过从导入它的模块中明确排除该jar来排除其他jar。
答案 1 :(得分:0)
No idea what went wrong but this was able to fix the problem
ant clean
ant runtime