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

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


当前回答

我还碰到了ClassNotFoundException:javax.xml.bind。DatatypeConverter使用Java 11和

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

我尝试了添加javax.xml的所有方法。绑定:jaxb-api或spring boot jakarta.xml。bind-api . .我发现了一个关于jjwt 0.10.0版本修复的提示。但最重要的是,JJWT包现在是分开的!

因此,查看这个参考:https://github.com/jwtk/jjwt/issues/510

很简单,如果你使用

Java11和 jjwt 0.9。x和 你将面临ClassNotFoundException:javax.xml.bind。DatatypeConverter问题,

JJWT 0.11版。X,但是使用分离的包:https://github.com/jwtk/jjwt#install

你的maven找不到更高版本的jjwt依赖,因为他们把包分开了。

欢呼。

其他回答

你只需要一个依赖项:

dependencies {
    implementation ("jakarta.xml.bind:jakarta.xml.bind-api:2.3.2")

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

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

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

如果你使用的是JDK 11,你可以将以下内容添加到你的Gradle(应用程序):

dependencies {
    ...
    annotationProcessor "javax.xml.bind:jaxb-api:2.3.1"
    ...
}

这对我很管用。

这是因为如果您使用的是JDK 9或更高版本,只需将此添加到您的pom

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

在pom.xml中添加javax.xml.bind依赖项

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