执行Jetty Maven插件时缺失RxInvokerProvider类,求排查思路
排查思路与解决方案建议
嘿,咱们一步步来拆解这个问题——既然手动加依赖反而引发新错误,说明根源绝对不是单纯的依赖缺失,而是版本不兼容或者依赖冲突。下面是具体的排查方向:
1. 先锁定版本兼容性核心矛盾
你用的Jetty插件是9.2.3版本,这个版本对应的JAX-RS支持是JAX-RS 2.0,但javax.ws.rs.client.RxInvokerProvider是JAX-RS 2.1才新增的类!这大概率是问题的核心:
- 你的项目里可能引入了JAX-RS 2.1+版本的依赖,但Jetty 9.2.x插件内置的JAX-RS环境还是2.0,导致类找不到。
- 赶紧去pom里查
javax.ws.rs:javax.ws.rs-api这类核心依赖的版本,如果是2.1+,要么降级到2.0.x系列,要么把Jetty插件升级到支持JAX-RS 2.1的版本(比如Jetty 9.4.x及以上)。
2. 用Maven依赖树揪出隐藏冲突
运行这个命令,把所有和JAX-RS相关的依赖树打出来,看看哪个依赖偷偷引入了不兼容的版本:
mvn dependency:tree -Dverbose -Dincludes=javax.ws.rs
重点关注两点:
- 是否有多个版本的
javax.ws.rs-api被不同依赖带进来 - Jetty插件自身依赖的JAX-RS版本是什么,和你项目里的依赖是否存在版本冲突
3. 检查Jetty插件的配置是否加错了依赖
有时候你可能在jetty-maven-plugin的<dependencies>块里手动加了JAX-RS相关的库,或者插件配置里有额外引入的依赖,这些都可能导致版本冲突。去pom里找Jetty插件的配置段,看看有没有这类手动添加的依赖,先移除试试,或者调整到和Jetty版本匹配的版本。
4. 确认JAX-RS实现与Jetty的适配性
如果你用了特定的JAX-RS实现(比如Jersey、RESTEasy),得确保它和Jetty版本能搭得上:
- 比如Jersey 2.26+才支持Jetty 9.4.x,而Jersey 2.20左右适配Jetty 9.2.x
- 要是同时混了Jersey和RESTEasy的依赖,类加载冲突几乎是必然的,得清理掉多余的实现依赖
5. 排查Jetty的类加载顺序问题
Jetty插件运行时的类加载机制可能会优先加载错误版本的类。你可以试试在Jetty插件配置里加个类加载规则,强制指定用正确的JAX-RS版本:
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.3.v20140905</version> <configuration> <webApp> <overrideDescriptor>src/main/resources/jetty-web.xml</overrideDescriptor> </webApp> </configuration> </plugin>
然后在jetty-web.xml里配置类加载优先级,把冲突的依赖排除掉。
内容的提问来源于stack exchange,提问作者novafluff
相关产品推荐
相关产品推荐

