Jetty 12实例化Server时抛出NoSuchMethodError异常求助
解决Jetty 12.0.8初始化时的NoSuchMethodError问题
这个java.lang.NoSuchMethodError: 'boolean org.eclipse.jetty.server.Handler$Wrapper.installBean(java.lang.Object)'错误,本质是类版本不匹配——要么项目混入了低版本Jetty的类,要么Jetty 12的核心依赖没配齐。按以下步骤排查:
1. 排查依赖版本冲突
Jetty 12重构了Handler相关内部API,低版本(如11.x、10.x)的Handler$Wrapper类没有installBean方法。必须确保所有Jetty相关依赖版本都是12.0.8:
- Maven项目执行:
mvn dependency:tree,搜索所有org.eclipse.jetty开头的依赖,检查版本一致性,排除非12.0.8的依赖。 - Gradle项目执行:
./gradlew dependencies,排查版本冲突,通过exclude指令移除低版本冲突依赖。
2. 确保核心依赖完整
Jetty 12采用模块化设计,仅引入jetty-server可能不够,需配齐核心模块。以Maven为例,至少需要:
<dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>12.0.8</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-util</artifactId> <version>12.0.8</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-io</artifactId> <version>12.0.8</version> </dependency> </dependencies>
如果涉及Servlet、Web应用,还要补充jetty-servlet或jetty-webapp,版本必须保持12.0.8。
3. 清理构建缓存与本地仓库
本地仓库的Jetty jar可能损坏或版本混装,执行以下操作:
- Maven:删除本地仓库Jetty目录(
~/.m2/repository/org/eclipse/jetty),再执行mvn clean install重新拉取依赖。 - Gradle:执行
./gradlew clean build --refresh-dependencies,强制刷新依赖并清理构建缓存。
4. 验证类加载环境
如果在第三方容器(如Tomcat)中运行Jetty代码,需确保容器未提供旧版本Jetty类。添加-verbose:class启动参数,查看Handler$Wrapper类的加载路径,确认是否来自12.0.8版本的jar。
5. 最小化测试验证
写一个极简测试类,仅依赖Jetty核心包,验证初始化是否正常:
import org.eclipse.jetty.server.Server; public class MinimalJettyTest { public static void main(String[] args) throws Exception { Server server = new Server(8080); server.start(); System.out.println("Jetty started successfully"); server.stop(); } }
如果该代码能正常运行,说明项目中其他依赖引入了冲突的Jetty版本;如果仍报错,重新下载Jetty官方发布的jar包替换本地仓库对应文件。
内容的提问来源于stack exchange,提问作者BarbetNL
相关产品推荐
相关产品推荐

