4

Lucene( 4.3.0 ) を必要とするプロジェクトがあり、次の依存関係を追加します: lucene-core、lucene-analyzers-common、lucene-queries、lucene-queryparser。

また、lucene-codecs の依存関係を追加した後も、同じエラーが発生します。

ただし、lucene-core jar にはコーデックが含まれています 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

----- 終了例外 -----

4

2 に答える 2

5

グーグルで検索すると、興味深い結果が得られます。

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

上記の問題により、Android APK ビルダーは、Lucene に必要な META-INF/services ディレクトリ内のいくつかのファイルを削除します。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 より上の任意のバージョン) を使用してください。

于 2013-07-21T15:02:09.703 に答える