【问题标题】:java AbstractMethodErrorjava AbstractMethodError
【发布时间】:2010-05-07 19:41:30
【问题描述】:

如何在lucene中处理这个错误:

java.lang.AbstractMethodError: org.apache.lucene.store.Directory.listAll()[Ljava/lang/String;
        at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:568)
        at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:69)
        at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
        at org.apache.lucene.index.IndexReader.open(IndexReader.java:188)

我正在调用 lucene 函数,但不幸的是,它本身调用了某个类的抽象方法,从上面的错误中可以看出。有什么办法解决这个问题?

谢谢,阿基尔

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    AbstractMethodError 只能在类定义发生不兼容更改时出现,因此看起来您正在使用 Lucene 不同部分的 JAR 的不兼容组合。尝试将所有 Lucene JAR 更新到最新版本。

    【讨论】:

    • 你是对的!我正在使用 lucene-core-3.0.0 和一年前使用 hadoop-0.19.0 获得的另一个 hadoop-contrib-index.jar。可能当时 lucene 有一些 otehr 版本。我将尝试为 hadoop-contrib-index 获取新 jar。让我们看看这是否有效。谢谢!
    【解决方案2】:

    另一种选择是您的索引发生了一些不好的事情 - 它是使用不同版本的 Lucene 构建的,或者缺少文件。尝试使用luke 打开索引。

    【讨论】:

    • 不,这不会导致 AbstractMethodError。
    【解决方案3】:

    好的!我找到了答案。这不是版本不匹配的问题。而是扩展抽象类 Directory 的 hadoop contrib 的 FileSystemDirectory 没有实现抽象函数 listAll()。 lucene indexReader.open() 函数正在调用 listAll() 函数。 我添加了这个功能,它现在已经启动并运行了。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多