我有一些使用JAXB API类的代码,这些类已作为Java 6/7/8中的JDK的一部分提供。当我用Java 9运行相同的代码时,在运行时得到错误,指示找不到JAXB类。
从Java 6开始,JAXB类就作为JDK的一部分提供了,那么为什么Java 9再也找不到这些类了呢?
我有一些使用JAXB API类的代码,这些类已作为Java 6/7/8中的JDK的一部分提供。当我用Java 9运行相同的代码时,在运行时得到错误,指示找不到JAXB类。
从Java 6开始,JAXB类就作为JDK的一部分提供了,那么为什么Java 9再也找不到这些类了呢?
当前回答
我知道我迟到了,但我的错误最终需要一个不同的解决方案……也非常简单
我最初部署到Tomcat 9,然后意识到我需要7…我忘记将我的类路径映射回build.xml中的7版本
希望这将在将来修复其他人的错误,谁设法忽略这个简单的问题,就像我一样!
其他回答
这对我很管用。只添加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>
对我来说,这是一个简单的解决方案(Mac用户)
run in terminal——> alias j8="export JAVA_HOME= ' /usr/libexec/ JAVA_HOME -v 1.8 '; 然后执行——> j8 就是这样!!(现在运行你的MVN命令)
或者你可以在你的.bash_profile中设置
这对我有用,我有一个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
以上就是全部内容,要了解更多内容,请参阅如何使用更新替代命令
您可以使用这个依赖项
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
如果您正在调用SOAP web服务(例如,使用jaxws-maven-plugin),只需添加此依赖项,所有JAXB错误就会消失:
<dependency>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-rt</artifactId>
<version>2.4.3</version>
</dependency>
使用Java 13进行测试