我确实将基于 Maven 的项目迁移到了 SpringBoot 2.0 和 Java 9。在此过程中,我必须添加一些依赖项以消除有关模块的 Java 9 警告(仍然可以使用 --add-modules 添加)。
但是我无法摆脱--add-modules java.xml.ws
。正如 JEP 320 中所建议的,添加依赖项:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
这些依赖项允许运行mvn test
来运行。 IntelliJ IDE 的构建也可以工作。
但是,当启动 Spring Boot 应用程序时,我收到以下运行时异常:
...
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:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
我认为您不需要任何 com.sun
依赖项,请使用 glassfish 来实现:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
作为旁注,我认为至少有一个启动 spring 上下文的集成测试(maven 故障安全测试)是很好的。如果您有的话,请确保至少使用surefire 和failsafe 2.21.0(之前的版本存在--add-modules
的错误)。
关于java - 如何替换 --add-modules java.xml.ws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480092/