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

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


当前回答

对我来说,在Java 11和gradle这是什么工作:

plugins {
      id 'java'
}

dependencies {
      runtimeOnly 'javax.xml.bind:jaxb-api:2.3.1'
}

其他回答

这对我很管用。只添加jaxb-api是不够的。

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>${jaxb-api.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>${jaxb-api.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>${jaxb-api.version}</version>
        </dependency>

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

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

对于我来说,Eclipse 2020-12(4.18.0)正在使用inbuild (org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre)

在安装的JREs(这是我想要的)中将java更新到1.8后解决了这个问题。

希望能有所帮助。

我在App中遇到了同样的问题,在模块级别构建。gradle添加了视图绑定和数据绑定。

早些时候

viewBinding {
    enabled = true
}

dataBinding {
    enabled = true
}

解决

dataBinding {
    enabled = true
}

在项目级构建中。Gradle使用如下

classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"

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

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