java.lang.NoClassDefFoundError:org/apache/lucene/codecs/Codec

CHm*_*nKa 4 java eclipse lucene junit android

我有一个需要Lucene(4.3.0)的项目并添加以下依赖项:lucene-core,lucene-analyzers-common,lucene-queries,lucene-queryparser.

并且,在添加lucene-codecs依赖之后,也会得到相同的错误.

但是,lucene-core jar包含Codec class

-----开始异常-----

I/TestRunner(2443): java.lang.NoClassDefFoundError: org/apache/lucene/codecs/Codec
I/TestRunner(2443):     at org.apache.lucene.index.LiveIndexWriterConfig.<init>(LiveIndexWriterConfig.java:118)
I/TestRunner(2443):     at org.apache.lucene.index.IndexWriterConfig.<init>(IndexWriterConfig.java:144)
I/TestRunner(2443):     at com.my.search.SearchIndexManager.newWriter(SearchIndexManager.java:301)
I/TestRunner(2443):     at com.my.search.SearchIndexManager.addIndexState(SearchIndexManager.java:95)
I/TestRunner(2443):     at com.my.SearchOperation.addIndexer(SearchOperation.java:68)
I/TestRunner(2443):     at com.my.test.SearchOperationTest.testSearchWithFilter(SearchOperationTest.java:208)
I/TestRunner(2443):     at java.lang.reflect.Method.invokeNative(Native Method)
I/TestRunner(2443):     at java.lang.reflect.Method.invoke(Method.java:511)
I/TestRunner(2443):     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
I/TestRunner(2443):     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
I/TestRunner(2443):     at junit.framework.TestCase.runBare(TestCase.java:134)
I/TestRunner(2443):     at junit.framework.TestResult$1.protect(TestResult.java:115)
I/TestRunner(2443):     at junit.framework.TestResult.runProtected(TestResult.java:133)
I/TestRunner(2443):     at junit.framework.TestResult.run(TestResult.java:118)
I/TestRunner(2443):     at junit.framework.TestCase.run(TestCase.java:124)
I/TestRunner(2443):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
I/TestRunner(2443):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
I/TestRunner(2443):     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
I/TestRunner(2443):     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
I/TestRunner(2736): Caused by: java.lang.IllegalArgumentException: A SPI class of type org.apache.lucene.codecs.Codec with name 'Lucene42' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath.The current classpath supports the following names: []
I/TestRunner(2736):     at org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:109)
I/TestRunner(2736):     at org.apache.lucene.codecs.Codec.forName(Codec.java:95)
I/TestRunner(2736):     at org.apache.lucene.codecs.Codec.<clinit>(Codec.java:122)
I/TestRunner(2736):     ... 19 more
Run Code Online (Sandbox Code Playgroud)

-----结束例外-----

Rus*_*tos 5

谷歌搜索出现了一些有趣的结果.

https://issues.apache.org/jira/browse/LUCENE-4204

根据上面的问题,Android APK构建器会删除META-INF/services目录中的一些文件,这是Lucene所要求的.他们提出了一些解决方法,比如通过在APK构建器完成后完成的一些ant任务,将lucene jar中的必要文​​件直接添加到APK.请注意,因为一些lucene jar使用META-INF/services目录中的相同文件,并且您可能会不成功地覆盖它们.

我实际上建议您使用android maven插件,因为他们已经为此应用了一个修复程序(请参阅https://code.google.com/p/maven-android-plugin/issues/detail?id=97).只需使用最新版本的插件(或3.2.1以上的任何版本).