TomEE 8.0支持JAX-RS 2.0还是2.1?版本矛盾求解析
关于TomEE 8.0 JAX-RS版本矛盾的解释
这个矛盾的核心原因在于TomEE 8.0所依赖的Java EE API包选择和规范对齐的细节:
- TomEE 8.0默认使用的是Apache Geronimo Java EE 8 API(
org.apache.tomee:javaee-api:8.0-5),而非Oracle官方的Java EE 8 API(javax:javaee-api:8.0)。 - 虽然Java EE 8规范明确要求包含JAX-RS 2.1,但Geronimo的这个API包在JAX-RS模块上存在偏差:其源码注释标注为Apache Geronimo JAX-RS Spec 2.0,并且实际的API类结构、版本和JAX-RS 2.1规范(以及Oracle官方API、Jersey依赖的
jakarta.ws.rs-api-2.1.6.jar)不匹配,这直接导致了你遇到的ClassNotFoundExceptions。 - 这种偏差是因为Apache Geronimo在维护Java EE 8 API包时,早期版本的JAX-RS部分未能完全对齐Java EE 8要求的2.1规范,而是沿用了JAX-RS 2.0的实现,而TomEE默认依赖了这个未完全对齐的API包。
临时解决办法
如果你需要在TomEE 8.0环境中使用Jersey 2.38的测试框架,可以:
- 排除TomEE自带的
org.apache.tomee:javaee-api依赖; - 替换为Oracle官方的
javax:javaee-api:8.0,或者直接引入jakarta.ws.rs-api:2.1.6并确保其类加载优先级高于TomEE的默认API包。
内容的提问来源于stack exchange,提问作者Gerhard
相关产品推荐
相关产品推荐

