我们正在将我们的项目从Java 8迁移到Java 11。其中一个API依赖于使用JAXB的库。正如我们知道JAXB已从Java 11中移除一样,我们开始在库的POM中包含JAXB依赖项。
<!-- https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api -->
<!-- API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
当我们运行API项目时,所有工作都很正常
MVNSpring Boot:奔跑
但是,当API部署在QA服务器中并使用带有以下各项的启动脚本启动时-
JAVA-JAR示例-API-3.0.0-SNAPSHOT.jar
API在调用依赖于JAXB的库时抛出以下错误-
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
- 有关联的例外:
[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:269)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:412)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
at com.eoriginal.ecore.client.documents.SearchDocumentHistoryAPI$RequestParameters.toMap(SearchDocumentHistoryAPI.java:344)
... 14 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
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:267)
更新:我添加了Maven Shade插件以生成包含所有依赖项的JAR,但在执行代码行以创建JAXBContext时,错误仍然存在-JAXBContext jaxbc=JAXBConext.newInstance(new Class[]{Abc.class});
2条答案
按热度按时间e0bqpujr1#
JAXB需要
javax.activation
模块,在更名为JakartaEE后成为jakarta.activation
。包含这种依赖关系应该会有所帮助:mccptt672#
将此依赖项添加到POM: