2013-10-28 49 views
1

我使用Lucene的4.0,我想以这种方式创建一个新的indexWriter创造新的Lucene索引中没有找到类错误

IndexWriter index = LuceneUtils.createIndexWriter(indexPath, true); 

(它的工作使用Lucene 3.6) 其中indexPathString与索引的路径。我得到这个错误:

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,但我得到了同样的错误。 其实012ath里的SimpleAnalyzer.class的路径不是org.apache.lucene.analysis.SimpleAnalyzer而是org.apache.lucene.analysis.core.SimpleAnalyzer

回答

1

看起来你可能在你的类路径中有一个3.6 jar。你可以验证一个旧版本没有被拉入,可能是由传递依赖?

+0

MVN依赖性:树将做的工作,如果使用Maven的。 –

+0

如果使用Gradle,则使用'gradle dependencies'。 –

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