为什么我一直想得到java.lang.NoClassDefFoundError的一个异常:org/apache/lucene/codecs/lucene50/Lucene50Codec

为什么我一直想得到java.lang.NoClassDefFoundError的一个异常:org/apache/lucene/codecs/lucene50/Lucene50Codec,lucene,Lucene,我正在使用Lucene 5.4,最近想将一个项目迁移到spring框架 如果在java主函数中调用索引代码,则不会出现错误,但在Tomcat9.0上部署代码时,会出现以下错误。WEB-INF/lib文件夹有四个Lucene jar,分别是Lucene-core-5.4.0.jar、Lucene-facet-5.4.0.jar、Lucene-querys-5.4.0.jar和Lucene-queryparser-5.4.0.jar。我认为这四个JAR对于文档索引应该足够了,对吗?另外,我正在使用l

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

如果在java主函数中调用索引代码,则不会出现错误,但在Tomcat9.0上部署代码时,会出现以下错误。WEB-INF/lib文件夹有四个Lucene jar,分别是Lucene-core-5.4.0.jar、Lucene-facet-5.4.0.jar、Lucene-querys-5.4.0.jar和Lucene-queryparser-5.4.0.jar。我认为这四个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)
Tomcat异常报告
消息处理程序处理失败;嵌套的异常是java.lang.NoClassDefFoundError:org/apache/lucene/codecs/lucene50/Lucene50Codec
说明服务器遇到内部错误,无法满足此请求。
例外
org.springframework.web.util.NestedServletException:处理程序处理失败;嵌套的异常是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)
javaservlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
javaservlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
根本原因
java.lang.NoClassDefFoundError:org/apache/lucene/codecs/lucene50/Lucene50Codec
java.lang.Class.getDeclaredConstructors0(本机方法)
privateGetDeclaredConstructors(Class.java:2671)
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.(NamedSPILoader.java:47)
org.apache.lucene.util.NamedSPILoader.(NamedSPILoader.java:37)
Codec$Holder.(Codec.java:47)
org.apache.lucene.codecs.Codec.getDefault(Codec.java:140)
org.apache.lucene.index.LiveIndexWriterConfig.(LiveIndexWriterConfig.java:120)
org.apache.lucene.index.IndexWriterConfig.(IndexWriterConfig.java:140)
com.zhaoyun.r3ds.core.lucene.lucenefactorympl.createWriter(lucenefactorympl.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(本机方法)
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)
javaservlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
javaservlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

索引可能是用Lucene的早期版本编写的,编码的索引在Lucene 5.4中不再可用。 您还需要包括该文件


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

谢谢您为我解决了这个问题。@knutwalker您好,您能更具体一点吗?Lucene-backward-codecs-5.4.0.jar应该包含在哪里?哪个文件夹?jar应该在类路径上的某个地方。具体情况取决于您的部署,它可能是一个名为
lib
的文件夹或类似的文件夹,或者您可能需要更改已执行的java命令,以将jar包含在
-classpath
参数中。