Java9+遇到的问题,启动SpringBoot 遇到java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34446485/article/details/80968685
要使JAXBAPI在运行时可用,请指定以下命令行选项:

--add-modules java.xml.bind

快速和肮脏的解决方案:(仅JDK 9/10)
要使JAXBAPI在运行时可用,请指定以下命令行选项:
--add-modules java.xml.bind

但是我仍然需要这个来使用Java 8

如果您尝试指定--add-modules对于旧的JDK,它会崩溃,因为它是一个无法识别的选项。我建议两种选择之一:

  1. 通过检查JDK版本,可以在启动脚本(如果有)中有条件地应用参数$JAVA_HOME/releaseJAVA_VERSION
  2. 您可以添加-XX:+IgnoreUnrecognizedVMOptions让JVM默默地忽略不可识别的选项,而不是崩溃。但要小心!您使用的任何其他命令行args都将不再由JVM对您进行验证。此选项适用于Oracle/OpenJDK以及IBMJDK(截至JDK8sr4)

替代快速解决方案:(仅限于JDK 9/10)

注意,您可以通过指定--add-modules java.se.ee选择。这,这个,那,那个java.se.ee模块是一个聚合模块,它包括java.se.ee以及上面的JavaEEAPI模块。

正确的长期解决方案:(所有JDK版本)

上面列出的JavaEEAPI模块都有标记@Deprecated(forRemoval=true)因此,它们可能会在Java 11中被删除。所以--add-moduleJava 11中的方法将不再有效。

在Java 11和后续中,您需要做的是在类路径或模块路径上包含您自己的JavaEEAPI副本。例如,可以将JAX-BAPI添加为maven依赖项,如下所示:

<!-- Java 6 = JAX-B Version 2.0   -->
<!-- Java 7 = JAX-B Version 2.2.3 -->
<!-- Java 8 = JAX-B Version 2.2.8 -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

有关Java模块化的详细信息,请参阅Jep 261:模块系统



注:其他选项参数可能无法识别,IDEA可以使用--add-modules java.se.ee

参考原文:https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j

补充IDEA,SpringBoot启动应用多次模拟多客户端

去掉右上角的√即可


以前用eclipse,现在公司得换了IDEA,不怎么熟悉,填坑中

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页