📌  相关文章
📜  java.lang.noclassdeffounderror: javax xml bind jaxbeexception - Java (1)

📅  最后修改于: 2023-12-03 14:42:21.017000             🧑  作者: Mango

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

介绍

当程序员运行Java代码时,有时会遇到java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException这样的异常。这是因为在JDK9及以上版本中,javax.xml.bind包已经被标记为不赞成使用,而是由JDK自带的JAXB Java组件取代。

这个问题通常会出现在使用旧版本的Java应用程序时,这些应用程序使用了已经被标记为不赞成使用的旧版JAXB API,因此需要将该应用程序升级以使用新版本的JAXB API。

解决方案

如果您遇到了该异常,可以尝试以下解决方案。

1. 升级JAXB API

推荐的解决方案是升级您的应用程序以使用新版本的JAXB API。如果您的应用程序使用Maven构建,您可以做以下更改:

<!-- 升级到最新版本的JAXB API -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
2. 引入JAX-WS依赖

如果您无法升级JAXB API,则可以尝试引入JAX-WS依赖,因为它包含了旧版本的JAXB API。可以将以下依赖项添加到您的Maven构建中:

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.1</version>
</dependency>
3. 添加命令行参数

如果您不想升级JAXB API或引入JAX-WS依赖,则可以添加以下命令行参数:

--add-modules java.xml.bind

这将使Java虚拟机加载javax.xml.bind模块,从而解决该异常。

总结

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException异常表示您的应用程序使用了已经被标记为不赞成使用的旧版JAXB API。解决该异常的推荐方法是升级您的应用程序以使用新版本的JAXB API。如果升级不可行,则可以引入JAX-WS依赖或添加命令行参数。