Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoClassDefFoundError:org/apache/lucene/codecs/Codec_Java_Android_Eclipse_Junit_Lucene - Fatal编程技术网

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

java.lang.NoClassDefFoundError:org/apache/lucene/codecs/Codec,java,android,eclipse,junit,lucene,Java,Android,Eclipse,Junit,Lucene,我有一个项目需要Lucene(4.3.0),并添加了以下依赖项: lucene核心,lucene分析器通用,lucene查询,lucene queryparser 并且,在添加lucene编解码器依赖项后,也会得到相同的错误 但是,lucene core jar包含编解码器类 -----开始异常----- I/TestRunner(2443):java.lang.NoClassDefFoundError:org/apache/lucene/codecs/Codec I/TestRunner(24

我有一个项目需要Lucene(4.3.0),并添加了以下依赖项: lucene核心,lucene分析器通用,lucene查询,lucene queryparser

并且,在添加lucene编解码器依赖项后,也会得到相同的错误

但是,lucene core jar包含编解码器类

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

I/TestRunner(2443):java.lang.NoClassDefFoundError:org/apache/lucene/codecs/Codec
I/TestRunner(2443):位于org.apache.lucene.index.LiveIndexWriterConfig.(LiveIndexWriterConfig.java:118)
I/TestRunner(2443):位于org.apache.lucene.index.IndexWriterConfig(IndexWriterConfig.java:144)
I/TestRunner(2443):位于com.my.search.SearchIndexManager.newWriter(SearchIndexManager.java:301)
I/TestRunner(2443):位于com.my.search.SearchIndexManager.addIndexState(SearchIndexManager.java:95)
I/TestRunner(2443):位于com.my.SearchOperation.addIndexer(SearchOperation.java:68)
I/TestRunner(2443):位于com.my.test.SearchOperationTest.testSearchWithFilter(SearchOperationTest.java:208)
I/TestRunner(2443):位于java.lang.reflect.Method.invokenactive(本机方法)
I/TestRunner(2443):位于java.lang.reflect.Method.invoke(Method.java:511)
I/TestRunner(2443):位于android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
I/TestRunner(2443):位于android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
I/TestRunner(2443):位于junit.framework.TestCase.runBare(TestCase.java:134)
I/TestRunner(2443):位于junit.framework.TestResult$1.protect(TestResult.java:115)
I/TestRunner(2443):位于junit.framework.TestResult.runProtected(TestResult.java:133)
I/TestRunner(2443):位于junit.framework.TestResult.run(TestResult.java:118)
I/TestRunner(2443):位于junit.framework.TestCase.run(TestCase.java:124)
I/TestRunner(2443):位于android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
I/TestRunner(2443):位于android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
I/TestRunner(2443):位于android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
I/TestRunner(2443):位于android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
I/TestRunner(2736):原因:java.lang.IllegalArgumentException:名为“Lucene42”的类型为org.apache.lucene.codecs.Codec的SPI类不存在。您需要将支持此SPI的相应JAR文件添加到类路径中。当前类路径支持以下名称:[]
I/TestRunner(2736):位于org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:109)
I/TestRunner(2736):位于org.apache.lucene.codecs.Codec.forName(Codec.java:95)
I/TestRunner(2736):位于org.apache.lucene.codecs.Codec.(Codec.java:122)
I/TestRunner(2736):。。。还有19个

-----结束异常------

您的问题似乎不是找不到
编解码器
类,而是找不到另一个类(它是SPI提供程序)(请参阅由引起的
)。如果您在最底部看到(也请参见),则该类在您的一个JAR的
META-INF
文件夹中声明为SPI提供程序

因此,搜索JAR以查找
META-INF/services/org.apache.lucene.codecs.Codec
文件,打开它并查看类的名称。您缺少包含该类的jar


希望这能有所帮助

谷歌搜索能找到一些有趣的结果

根据上述问题,Android APK builder将删除Lucene所需的META-INF/services目录中的一些文件。他们建议了一些解决方法,比如在APK构建器完成后,通过一些ant任务将lucene JAR中的必要文件直接添加到APK中。请小心,因为某些lucene JAR使用META-INF/services目录中的相同文件,您可能会不必要地覆盖它们


实际上,我建议您使用android maven插件,因为他们已经对此进行了修复(请参阅)。只需使用插件的最新版本(或3.2.1以上的任何版本)。

是否已将依赖项标记为已在Eclipse中导出?这是一个maven项目,并在elcipse中编码。编译时一切正常。但是运行测试代码时出错。非常感谢。我忙了一段时间。我可以在lucene core.jar中找到META-INF/services/org.apache.lucene.codecs.Codec,但它不存在于android apk文件的META-INF目录下。@chmooka该文件只需要存在于类路径中的jar中。实现类似乎位于
lucene内核中,但它没有机会被加载。可能Android测试运行程序弄乱了您的类路径(请参阅消息:当前类路径支持以下名称:[])。你能为你试图运行的测试添加全部代码吗?我使用maven android插件在android中成功运行Lucene4x。如何使用“右键单击测试代码类->运行方式->Android Junit测试”在eclipse中运行测试代码。恐怕我不太熟悉在Eclipse中构建Android应用程序。他们使用什么构建系统?他们是否有一个Ant构建文件(build.xml)?如果他们使用的是Ant,那么可以将某种编译后目标添加到构建文件中,将必要的文件从Lucene jar复制到APK上。
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