如何替换–add-modules java.xml.ws

我确实将基于Maven的项目迁移到了SpringBoot 2.0和Java 9.在这个过程中,我不得不添加一些依赖项来摆脱有关模块的Java 9警告(仍然可以使用–add-modules添加)。

但是我无法摆脱--add-modules java.xml.ws 正如JEP 320中所建议的那样,添加依赖项:

  javax.xml.bind jaxb-api 2.3.0   com.sun.xml.bind jaxb-impl 2.3.0   com.sun.xml.bind jaxb-core 2.3.0  

这些依赖关系允许运行mvn test来运行。 IntelliJ IDE的构建也有效。

但是,在启动Spring Boot应用程序时,我得到以下运行时exception:

 ... Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:174) ... 64 more 

我错过了哪些Maven依赖项? JarFinder告诉我实现类是jaxb-impl的一部分,但只有2.2.12版本。 那么这个实现在哪里消失了?

你还需要jaxb-runtime:

   org.glassfish.jaxb jaxb-runtime 2.3.0  

我认为您不需要任何com.sun依赖项,请使用glassfish实现:

   org.glassfish.jaxb jaxb-runtime 2.3.0   org.glassfish.jaxb jaxb-core 2.3.0   javax.xml.bind jaxb-api 2.3.0  

作为旁注,我认为至少有一个集成测试(maven failsafe one)可以启动spring上下文。 如果你有一个确保你至少使用surefire和failsafe 2.21.0(以前的版本有--add-modules的错误)。