jaxb - 没有找到 Jakarta XML Binding-API 的实现?
问题描述
我的背景:
BND(带有 Eclipse IDE 的 bndtools);
OSGI (-runfw: org.eclipse.osgi;version='[3.16.100.v20201030-1916,3.16.200.v20210226-1447]') ;
符文:JavaSE-1.8
在 bnd.launch 文件中:
-runbundles: \ org.apache.felix.gogo.command;version='[1.1.2,1.1.3)',\ org.apache.felix.gogo.runtime;version='[1.1.4,1.1.5)',\ org.apache.felix.gogo.shell;version='[1.1.4,1.1.5)',\ org.apache.commons.commons-fileupload;version='[1.4.0,1.4.1)',\ org.apache.commons.commons-io;version='[2.8.0,2.8.1)',\ org.apache.felix.webconsole;version='[4.6.0,4.6.1)',\ org.apache.felix.http.jetty;version='[4.1.6,4.1.7)',\ org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\ org.apache.felix.scr;version='[2.1.24,2.1.25)',\ org.eclipse.equinox.cm;version='[1.5.0,1.5.1)',\ org.eclipse.equinox.console;version='[1.4.300,1.4.301)',\ org.eclipse.equinox.device;version='[1.1.100,1.1.101)',\ org.eclipse.osgi.services;version='[3.10.0,3.10.1)',\ org.eclipse.osgi.util;version='[3.6.0,3.6.1)',\ ch.qos.logback.classic;version='[1.2.3,1.2.4)',\ ch.qos.logback.core;version='[1.2.3,1.2.4)',\ org.apache.felix.logback;version='[1.0.2,1.0.3)',\ slf4j.api;version='[1.7.30,1.7.31)',\ com.sun.activation.jakarta.activation;version='[2.0.1,2.0.2)',\ jakarta.xml.bind-api;version='[3.0.1,3.0.2)',\ com.sun.xml.bind.jaxb-osgi;version='[3.0.1,3.0.2)'
- 根本不使用任何 POM.xml 文件
当我启动应用程序时,我得到一个
jakarta.xml.bind.JAXBException: Implementation of Jakarta XML Binding-API has not been found on module path or classpath. - with linked exception: [java.lang.ClassNotFoundException: org.glassfish.jaxb.runtime.v2.ContextFactory] at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:255) at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:243) at jakarta.xml.bind.ContextFinder.find(ContextFinder.java:407) at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:691) at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:632)
如果我添加org.glassfish.jaxb.runtime;version='[3.0.1,3.0.2)'
到 runbundles 列表,它不会改变任何东西(同样的例外)。然后,如果我添加-runpath: org.glassfish.jaxb.runtime;version='[3.0.1,3.0.2)'
到 bnd.launch 文件:它也不会改变任何东西(同样的例外)。
我做错了什么??谢谢
解决方案
您在 Java 1.9 或更高版本上运行吗?(错误消息涉及模块路径。)问题可能是在以后的版本中不再从 JVM 导出 JAXB。这有时会导致 glassfish 的类加载失败,而不会说出根本原因。
您可以添加-runvm -v:class
以获取有关类加载的更多信息。
推荐阅读
- laravel - 文件路径被保存为服务器上的临时路径而不是原始客户端名称
- python - 如何将由其他地方定义的函数和变量构建的表达式传递给 exec() 或 eval()?
- swift - 如何在 SwiftUI 中切换全屏模式?
- java - Java 中的音乐(暂停/停止)
- performance - 如何判断一个函数增长的快慢?
- c# - 通过 Ajax 发送从 DataTable 中挑选的对象数组到控制器 MVC 错误 400
- c - *** 检测到堆栈粉碎 *** 在双倍循环中使用双数组
- algorithm - 最多 k 个设施和预算 b 的无能力设施选址问题
- c++ - 如何创建一个类来存储大小仅受系统可用内存总量限制的数字?
- javascript - 来自输入类型=文件的角度传递引用变量