java.lang.IncompatibleClassChangeError,BM25BooleanQuery

时间:2011-04-19 12:50:42

标签: java lucene

Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at NVoting.<init>(NVoting.java:143)
    at Main.main(Main.java:8)

在这一行:

booleanQuery.add(new BM25BooleanQuery(current_tags[i], 
                            "tags",
                            new StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_31)), 
                            BooleanClause.Occur.SHOULD);

我正在使用BM25 Okapi检索系统的实现:http://nlp.uned.es/~jperezi/Lucene-BM25

你能帮我解决这个问题吗?我正在使用Lucene 3.1 我也尝试过Lucene 2.9.4而没有运气。

感谢

2 个答案:

答案 0 :(得分:1)

您使用不同的第三方库进行编译和执行,或者某些第三方库不兼容。

如果您使用一个版本的库进行编译而另一个版本(具有稍微不同的API)执行,则可能会发生错误。仔细检查所有库版本(它们适合吗?)和类路径。

答案 1 :(得分:0)

我不是Java程序员,所以请谨慎对待这个答案,但这是我看到的事实:

  1. BM25实施的最后更新日期是2009年1月(或可能是2009年12月)
  2. Lucene 3.1于今年3月发布
  3. IncompatibleClassChangeError表示依赖类中的不兼容更改
  4. 所以我认为你需要使用相同版本的Lucene作为构建时使用的BM25实现,或者从源代码重建它(如果可能的话)。

    祝你好运,