2013-07-21 5 views
4

내가 루씬을 필요로하는 프로젝트가 (4.3.0) 다음과 같은 dependenies 추가 루씬 코어, 루씬 - 분석기 - 일반, lucene- 쿼리, lucene-queryparser.java.lang.NoClassDefFoundError가 : 조직/아파치/루씬/코덱/코덱

그리고 lucene-codecs 종속성을 추가 한 후에도 동일한 오류가 발생합니다.

하지만은 루씬 코어 항아리 --- -----

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 

----- 끝 예외를 예외를 시작 ----- 코덱class

을 포함 -

+0

Eclipse에서 내 보낸 종속성을 표시 했습니까? – Desert

+0

이것은 maven 프로젝트이며 elcipse.all로 코딩하면 컴파일이 잘됩니다. 테스트 코드를 실행할 때 오류가 발생합니다. – CHmoonKa

답변

5

인터넷 검색 몇 가지 흥미로운 결과를 전환하는 데 도움이 희망 클래스를 포함하는 항아리가 누락되었습니다.

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

위의 문제에 따르면, 안드로이드 APK 빌더는 루씬에서 요구하는 META-INF는/서비스 디렉토리에 어떤 파일을 제거합니다. APK 빌더가 완료된 후에 수행되는 일부 개미 작업을 통해 APK로 직접 lucene jars에서 필요한 파일을 추가하는 것과 같은 몇 가지 해결 방법을 제안합니다. 일부 lucene jar는 META-INF/services 디렉토리에서 같은 파일을 사용하기 때문에 조심해야하며, unsecessarily 덮어 쓸 수도 있습니다.

실제로 이것에 대한 수정을 적용 했으므로 안드로이드 메이븐 플러그인을 사용하는 것이 좋습니다 (https://code.google.com/p/maven-android-plugin/issues/detail?id=97 참조). 최신 버전의 플러그인 (또는 3.2.1 이상 버전) 만 사용하십시오.

+0

maven-android-plugin을 사용하여 안드로이드에서 Lucene4x를 성공적으로 실행했습니다. "테스트 코드를 마우스 오른쪽 단추로 클릭 -> Android Junit 테스트로 실행"을 사용하여 Eclipse에서 테스트 코드를 실행하는 방법? – CHmoonKa

+0

안녕 CHmoonKa. Eclipse에서 Android 앱을 만드는 데 익숙하지 않은 것 같습니다. 그들이 사용하는 시스템은 무엇입니까? 그들에게 Ant 빌드 파일 (build.xml)이 있습니까? 그들이 Ant를 사용한다면, Lucene jar에서 APK로 필요한 파일을 복사하는 빌드 파일에 일종의 포스트 컴파일 타겟을 추가하는 것이 가능할 수 있습니다. –

3

Codec 클래스가 발견되지 않았지만 다른 클래스 (SPI 제공자)가 없습니다 (Caused by 참조). 맨 아래에 Lucene package description이 보이면 (here 참조)이 클래스는 항아리 중 하나의 META-INF 폴더에 SPI 공급자로 선언됩니다.

항아리를 검색하여 META-INF/services/org.apache.lucene.codecs.Codec 파일을 찾은 다음 열어 클래스 이름을 확인하십시오. 당신은

그것이

+0

대단히 감사합니다. 나는 얼마 동안 바쁘다. lucene-core.jar에서 META-INF/services/org.apache.lucene.codecs.Codec을 찾을 수 있지만, 안드로이드 apk 파일의 META-INF 디렉토리 아래에 존재하지 않는다. – CHmoonKa

+0

@CHmoonKa 파일은 클래스 경로에있는 jar 파일 내에 존재해야합니다. 구현 클래스가'lucene-core' 내부에있는 것 같지만로드 될 기회는 없습니다. 아마도 Android 테스트 러너가 클래스 경로를 망칠 것입니다 (메시지 : * 현재 클래스 경로는 다음 이름을 지원합니다 : [] *). 실행할 테스트의 전체 코드를 추가 할 수 있습니까? –

관련 문제