问题描述
我的背景:
-
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,\
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,\
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,\
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
以获取有关类加载的更多信息。