Java17升级:寻求Jakarta版CXF Swagger2Feature替代方案
解决方案:升级CXF至4.x版本并替换对应Swagger组件
你的核心问题是旧版CXF的Swagger2Feature依赖javax命名空间API,无法适配Java 17及Jakarta EE规范。以下是具体的替代方案:
升级CXF主版本到4.x系列
CXF从4.0版本开始完全迁移到Jakarta EE规范,所有javax相关的依赖都替换为jakarta命名空间,完美兼容Java 17+。替换Swagger支持组件
原cxf-rt-rs-service-description-swagger组件在CXF 4.x中被拆分为针对不同OpenAPI版本的组件:- 若需继续支持Swagger 2.0(对应OpenAPI v2),使用
cxf-rt-rs-service-description-openapi-v2 - 若要升级到OpenAPI v3,可使用
cxf-rt-rs-service-description-openapi-v3
- 若需继续支持Swagger 2.0(对应OpenAPI v2),使用
替换核心类
原来的org.apache.cxf.jaxrs.swagger.Swagger2Feature对应替换为org.apache.cxf.jaxrs.openapi.v2.Swagger2Feature,这个类的依赖已经全部改为jakarta命名空间(比如jakarta.servlet.ServletContext、jakarta.ws.rs.core.Application等),完全适配你的Java 17环境。Maven依赖示例(OpenAPI v2/Swagger 2.0)
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description-openapi-v2</artifactId> <version>4.0.0+</version> <!-- 建议使用最新稳定版,比如4.0.3或更高 --> </dependency>
- 注意事项
- 同步升级所有其他CXF相关依赖(如
cxf-rt-frontend-jaxrs、cxf-core等)到4.x版本,避免版本冲突 - 如果项目中还有其他javax相关的JAX-RS或Servlet依赖,也需要替换为对应的jakarta版本(比如
jakarta.ws.rs:jakarta.ws.rs-api、jakarta.servlet:jakarta.servlet-api)
内容的提问来源于stack exchange,提问作者carlos palma
相关产品推荐
相关产品推荐

