--add-modules java.xml.bind
快速和肮脏的解决方案:(仅JDK 9/10)
要使JAXBAPI在运行时可用,请指定以下命令行选项:--add-modules java.xml.bind
但是我仍然需要这个来使用Java 8
如果您尝试指定--add-modules
对于旧的JDK,它会崩溃,因为它是一个无法识别的选项。我建议两种选择之一:
- 通过检查JDK版本,可以在启动脚本(如果有)中有条件地应用参数
$JAVA_HOME/release
为JAVA_VERSION
。 - 您可以添加
-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-module
Java 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,不怎么熟悉,填坑中