Nutch: NoClassDefFoundError: org/springframework/retry/RetryCallback

Nutch: NoClassDefFoundError: org/springframework/retry/RetryCallback

我是 运行 普通的 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 上的另一个 但项目不同能够通过添加 spring-framework-messaging 依赖项

来解决问题
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-messaging</artifactId>
  <version>4.2.4.RELEASE</version>
</dependency>

好吧,我正在使用带有 ivy 的 nutch 1.12 版进行依赖管理,所以在我的配置中如下:

<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-消息传递依赖项,它仍然无法正常工作。 有什么想法吗?

当你的 class 路径中有多个版本的相同 jar (相同 class) 时,可能会出现这些错误,你可以通过执行 [=12= 查看依赖树]

<report conf="compile" /> for ivy projects

mvn dependency:tree for maven projects 

缩小到您想要的版本,您可以通过从导入它的模块中明确排除那个 jar 来排除另一个 jar。

不知道出了什么问题,但这能够解决问题

ant clean
ant runtime