启动Solr 8.11.2时出现jakarta.servlet.http.HttpServletResponse类未找到错误
Java 11 + Solr 8.11.2(内置Jetty 9.4)启动时出现
NoClassDefFoundError: jakarta/servlet/http/HttpServletResponse 启动时触发的核心错误:
java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServletResponse
完整堆栈信息:
java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ... at org.eclipse.jetty.start.Main.start(Main.java:491) at org.eclipse.jetty.start.Main.main(Main.java:77) Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServletResponse at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) ... at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.construct(XmlConfiguration.java:1031) ... at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:380) at org.eclipse.jetty.xml.XmlConfiguration.lambda$main$3(XmlConfiguration.java:1893) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1857) ... 7 more Caused by: java.lang.ClassNotFoundException: jakarta.servlet.http.HttpServletResponse at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 23 more
我们知晓javax.*到jakarta.*的迁移,但不理解为何会尝试加载jakarta.类。Jetty 9.4仍使用/提供javax.,且引发错误的jetty.xml配置文件中也无jakarta相关引用。
排查与解决方向
- 检查类路径冲突:排查所有加载的jar包,确认是否存在
jakarta.servlet-api-*.jar或其他包含jakarta.servlet类的依赖。Jetty 9.4依赖的是javax.servlet-api-3.1.0.jar,两者不能共存,移除所有Jakarta版本的Servlet API jar包。 - 清理第三方插件/扩展:检查Solr的
solrhome/lib、各个core的lib目录,以及自定义添加的扩展,移除任何依赖Jakarta Servlet的组件。Solr 8.11.2不兼容Jakarta版本的插件。 - 恢复启动脚本默认配置:若手动修改过
solr.sh/solr.cmd中的类路径参数,确认是否误添加了指向Jakarta API的路径,恢复为默认配置。 - 清理缓存目录:删除Jetty的工作目录(通常在Solr根目录下的
work文件夹),以及Java临时目录中Jetty相关的缓存文件,避免残留类文件导致加载异常。
内容的提问来源于stack exchange,提问作者Gaël J
相关产品推荐
相关产品推荐

