如何解决Java11运行时出现javax/xml/bind/JAXBException类缺失问题
问题判断
该问题属于典型的JDK版本兼容问题
Java 8 及更早版本的JDK默认内置了JAXB(Java Architecture for XML Binding)的API和实现类,从Java 9 引入模块化机制后,所有Java EE相关组件被从JDK核心库中移除,Java 11 更是彻底删除了相关内置模块,因此高版本JDK环境下运行依赖JAXB的代码会出现类缺失报错。
你当前只引入了JAXB的运行时实现包,缺失JAXB的API包,javax.xml.bind.JAXBException属于API层定义的类,因此运行时找不到。同时由于报错触发在sonar-maven-plugin执行阶段,还需要考虑插件运行时的类加载隔离问题。
解决方案
按优先级从高到低尝试以下方案:
- 方案1:补全项目层面的JAXB依赖
在pom.xml中新增JAXB API依赖,完整依赖配置如下:<!-- JAXB API 核心包 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <!-- JAXB 运行时实现包 --> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.3</version> </dependency> - 方案2:为sonar插件单独添加依赖
如果补全项目依赖后仍有报错,说明sonar插件的类加载器隔离了项目依赖,需要给插件单独配置依赖:<build> <plugins> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.9.0.2155</version> <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.3</version> </dependency> </dependencies> </plugin> </plugins> </build> - 方案3:执行命令时附加JVM参数(仅兼容Java9/10,不推荐Java11使用)
执行sonar扫描命令时添加模块启动参数:mvn sonar:sonar --add-modules java.xml.bind
内容的提问来源于stack exchange,提问作者Champ-Java
相关产品推荐
相关产品推荐

