Apache CXF Plugin 3.3.12/3.4.5 在Java 11环境下运行异常如何解决?
Java 11下Apache CXF cxf-codegen-plugin生成代码编译失败解决方案
你遇到的报错核心原因是Java 11移除了原JDK内置的Java EE相关API模块,CXF生成的代码依赖的javax.jws、javax.xml.bind等接口不再默认内置,需要手动引入依赖。很多用户仅给CXF插件添加依赖,忽略了项目编译阶段也需要对应依赖,才会导致已有解决方案无效,按以下步骤配置即可解决:
1. 确认版本兼容性
你当前使用的org.apache.cxf:cxf-codegen-plugin:3.3.12/3.4.5均原生支持Java 11,无需调整插件版本。
2. 添加项目全局编译依赖
在项目pom.xml的<dependencies>节点下添加以下依赖,注意是项目全局依赖,不是仅添加到插件的依赖配置中:
<!-- JAX-WS API 解决javax.jws包缺失问题 --> <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>javax.jws</groupId> <artifactId>javax.jws-api</artifactId> <version>1.1</version> </dependency> <!-- JAXB 相关依赖 解决javax.xml.bind包缺失问题 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency>
3. 补充插件依赖(可选,仍报错时配置)
如果添加全局依赖后仍有生成阶段的报错,给cxf-codegen-plugin也补充上述依赖即可:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>你的CXF版本号</version> <dependencies> <!-- 把上面列的所有依赖复制到这里 --> </dependencies> <executions> <!-- 你原有wsdl2java的执行配置保持不变 --> </executions> </plugin>
4. 排查依赖冲突
如果使用Spring Boot等框架,可通过mvn dependency:tree命令排查是否存在不同版本的JAXB/JAX-WS依赖冲突,对冲突包添加<exclusions>排除即可。
内容的提问来源于stack exchange,提问作者mmo
相关产品推荐
相关产品推荐

