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

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


当前回答

SBT解决方案

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

其他回答

我在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"

转到您的构建。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'

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

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

在编译和运行时,添加开关——add-modules java.xml.bind

javac --add-modules java.xml.bind <java file name>

java --add-modules java.xml.bind <class file>

JDK 9模块的良好介绍也可以在以下位置找到: https://www.youtube.com/watch?v=KZfbRuvv5qc

这对我有用,我有一个spring boot项目,在Java 8中编译,但我不知道为什么有一天我的maven开始用Java 11编译,在Ubuntu中我用来修复它:

sudo update-java-alternatives  -l

这显示了我的pc上可用的JDK:

java-1.11.0-openjdk-amd64      1111       /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64`

所以我最后运行这个命令来选择一个想要的:

sudo update-java-alternatives  -s java-1.8.0-openjdk-amd64 

以上就是全部内容,要了解更多内容,请参阅如何使用更新替代命令