首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.NoClassDefFoundError: org/apache/lucene/codecs/Codec

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

Stack Overflow用户
提问于 2013-07-21 08:28:56
回答 2查看 5.3K关注 0票数 4

我有一个需要lucene的项目(4.3.0),并添加了以下依赖项: lucene-core、lucene-分析器-通用的、lucene-查询、lucene-查询解析器。

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

但是,lucene核心jar包含Codec class

代码语言:javascript
复制
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

-结束例外

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-21 15:02:09

谷歌搜索出一些有趣的结果。

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

根据上面的问题,Android构建器删除META/services目录中的一些文件,这是Lucene所需要的。他们提出了一些解决办法,比如在完成APK构建器之后,通过一些ant任务将lucene中的必要文件直接添加到APK中。不过要小心,因为有些lucene jars在META/services目录中使用相同的文件,您可能会不成功地覆盖它们。

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

票数 5
EN

Stack Overflow用户

发布于 2013-07-21 13:09:40

您的问题似乎不是找不到Codec类,而是找不到另一个类(它是SPI提供程序)(请参阅Caused by)。如果您在Lucene封装描述中看到最底层(也请参见这里),则在您的jars的META-INF文件夹中,该类被声明为SPI提供程序。

因此,搜索您的jars以找到一个META-INF/services/org.apache.lucene.codecs.Codec文件,打开它并查看类的名称。您丢失了包含该类的jar。

希望它能帮上忙

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17770451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档