2013-10-28 71 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