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

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


当前回答

我知道我迟到了,但我的错误最终需要一个不同的解决方案……也非常简单

我最初部署到Tomcat 9,然后意识到我需要7…我忘记将我的类路径映射回build.xml中的7版本

希望这将在将来修复其他人的错误,谁设法忽略这个简单的问题,就像我一样!

其他回答

您需要向maven添加jaxb依赖项。glassfish实现版本2.3.2与新的jakarta EE jaxb api版本2.3.2完全兼容。

<!-- API -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.2</version>
</dependency>

<!-- Runtime -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.2</version>
</dependency>

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

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

这解决了我在Java 12上运行Apache Camel 2.24.1的依赖关系的问题:

    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>

    <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-core</artifactId>
        <version>2.3.0.1</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0.1</version>
    </dependency>

转到您的构建。gradle和添加以下Java 9或Java 10的依赖项。

sourceCompatibility = 10 // You can also decrease your souce compatibility to 1.8 

//java 9+ does not have Jax B Dependents

    compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
    compile group: 'com.sun.xml.bind', name: 'jaxb-core', version: '2.3.0'
    compile group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.0'
    compile group: 'javax.activation', name: 'activation', version: '1.1.1'

SBT解决方案

libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.1"