为什么我要保持java.lang.NoClassDefFoundError的异常:org / apache / lucene / codecs / lucene50 / Lucene50Codec

时间:2016-01-07 12:01:21

标签: lucene

我正在使用Lucene 5.4,最近想将项目迁移到spring框架。

如果我在java main函数中调用我的索引代码它没有错误,但是当在Tomcat 9.0上部署代码时,它会出现以下错误。 WEB-INF / lib文件夹有四个Lucene jar,分别是lucene-core-5.4.0.jar,lucene-facet-5.4.0.jar,lucene-queries-5.4.0.jar和lucene-queryparser-5.4。 0.jar。我认为这四个罐子应该足够用于文档索引,对吧?另外我使用lucent 5.4,为什么代码试图找到Lucene50Codec类而不是Lucene54Codec类?

Tomcat Exception report

message Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene50/Lucene50Codec

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene50/Lucene50Codec
    org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1302)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:977)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
root cause

java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene50/Lucene50Codec
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
    java.lang.Class.getConstructor0(Class.java:3075)
    java.lang.Class.newInstance(Class.java:412)
    org.apache.lucene.util.NamedSPILoader.reload(NamedSPILoader.java:67)
    org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:47)
    org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:37)
    org.apache.lucene.codecs.Codec$Holder.<clinit>(Codec.java:47)
    org.apache.lucene.codecs.Codec.getDefault(Codec.java:140)
    org.apache.lucene.index.LiveIndexWriterConfig.<init>(LiveIndexWriterConfig.java:120)
    org.apache.lucene.index.IndexWriterConfig.<init>(IndexWriterConfig.java:140)
    com.zhaoyun.r3ds.core.lucene.LuceneFactoryImpl.createWriter(LuceneFactoryImpl.java:113)
    com.zhaoyun.r3ds.core.engine.SearchEngineImpl.getImageWriter(SearchEngineImpl.java:87)
    com.zhaoyun.r3ds.core.engine.ImageEngine.addImageDocument(ImageEngine.java:50)
    com.zhaoyun.r3ds.restful.controller.SemanticController.index(SemanticController.java:43)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:497)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

1 个答案:

答案 0 :(得分:2)

该索引可能是使用早期版本的Lucene编写的,并且Lucene 5.4中不再提供编码。 您还需要包含lucene-backward-codecs-5.4.0.jar文件。

或者,您可能在Tomcats类路径中有多个版本的Lucene,其中一些版本为5.0版,一些版本为5.4版。您应该确保在Tomcat的类路径中只有一个版本的Lucene。