我正在使用lucene 4.0,我希望以这种方式创建一个新的indexWriter
:
IndexWriter index = LuceneUtils.createIndexWriter(indexPath, true);
(使用lucene 3.6工作)
其中indexPath
是String
,其中包含索引的路径。我收到了这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/analysis/SimpleAnalyzer
at lucene.IndexCreator.<init>(IndexCreator.java:25)
at main.Main.main(Main.java:72)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.analysis.SimpleAnalyzer
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 2 more
我已经读过除了lucene-analyzers-common-4.0.0.jar
之外我需要将lucene-core-4.0.0.jar
添加到项目中,但是我得到了同样的错误。
事实上,SimpleAnalyzer.class
内lucene-analyzers-common-4.0.0.jar
的路径不是org.apache.lucene.analysis.SimpleAnalyzer
而是org.apache.lucene.analysis.core.SimpleAnalyzer
。
答案 0 :(得分:1)
看起来你的类路径中可能有一个3.6 jar。您是否可以验证旧版本是否未被提取,可能是传递依赖?
答案 1 :(得分:1)
您的项目中有lucene-core jar
的旧版本。以前版本中SimpleAnalyzer类的路径为org.apache.lucene.analysis.SimpleAnalyzer
。
在编译期间,系统能够在该路径上找到SimpleAnalyzer
。但在运行时它指的是新版本。现在,该类存在于lucene-analyzers-common-4.0.0.jar
下的不同路径下。因此NoClassDefFoundError。
您可以通过阅读此内容来进一步理解 - http://javareferencegv.blogspot.com/2013/10/debugging-javalangnoclassdeffounderror.html