我有一些使用JAXB API类的代码,这些类已作为Java 6/7/8中的JDK的一部分提供。当我用Java 9运行相同的代码时,在运行时得到错误,指示找不到JAXB类。

从Java 6开始,JAXB类就作为JDK的一部分提供了,那么为什么Java 9再也找不到这些类了呢?


当前回答

如果你使用的是上面提到的JDK 8,请遵循以下步骤:

添加javax.xml.bind依赖项

<dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
</dependency>

清洁maven 安装maven

其他回答

好吧,我一直有同样的问题,但我使用的是Java 8,并不断得到这个错误,我尝试了大多数的解决方案。但事实证明,我的maven仍然指向java 9,即使我将全局java版本设置为8,只要我修复了它就能正常工作。

对于任何可能遇到这类问题的人,请参阅如何修复Maven以使用默认Java(已存档)

在我的例子中(spring boot fat jar),我只是将以下内容添加到pom.xml。

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

我在使用Spring Boot 2.0.5时遇到了同样的问题。在Java 11上发布。

仅仅添加javax.xml.bind:jaxb-api:2.3.0并不能解决这个问题。我还必须将Spring Boot更新到最新的Milestone 2.1.0。M2,所以我认为这将在下一次正式发布中修复。

如果你使用的是上面提到的JDK 8,请遵循以下步骤:

添加javax.xml.bind依赖项

<dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
</dependency>

清洁maven 安装maven

我在Debian 10中开发Java项目时遇到了这个问题。

每次我启动应用程序时,它都会在日志文件中抛出错误:

java.lang.NoClassDefFoundError: javax / xml /绑定/ JAXBException

以下是我的解决方法:

这个问题通常是在类路径中缺少JAXB库(用于XML绑定的Java体系结构)时引起的。JAXB包含在Java SE 10或更早版本中,但从Java 11或更新版本的Java SE中删除了它—在Jakarta EE项目下转移到Java EE。

所以,我检查我的Java版本使用:

java --version

它的输出是这样的

openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Debian-1deb10u1, mixed mode, sharing)

因此,我遇到了JAXBException错误,因为我使用的是Java 11,该类路径中没有JAXB库(用于XML绑定的Java体系结构)。其中包括JAXB。

为了解决这个问题,我必须将JAXB API库添加到我的tomcat安装的lib (/opt/tomcat/lib)目录:

sudo wget https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.4.0-b180830.0359/jaxb-api-2.4.0-b180830.0359.jar

然后我将它从jaxb-api-2.4.0-b180830.0359.jar重命名为jaxb-api.jar:

sudo mv jaxb-api-2.4.0-b180830.0359.jar jaxb-api.jar

注意:确保您更改了允许tomcat访问该文件的权限,并将所有权更改为tomcat:

sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 777 /opt/tomcat/

然后重启tomcat服务器:

sudo systemctl restart tomcat

资源:[解决]java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

这是所有。