gpt4 book ai didi

java - (Java 12) 当库作为插件加载时 JAXB 不工作

转载 作者:行者123 更新时间:2023-12-01 17:50:52 25 4
gpt4 key购买 nike

您好,我目前正在将我的 Bukkit 插件之一更新到 java 12(从 8)其他所有库都顺利运行(除了更新其中一些库)然而,正如你们大多数人都知道 JAXB 在 J11 中已被完全删除,因此我使用 these dependencies

在我的 fat jar 子里。但是,编译然后运行后,我收到此运行时错误:

[13:34:48 WARN]: javax.xml.bind.DataBindingException: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
[13:34:48 WARN]: - with linked exception:
[13:34:48 WARN]: [java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
[13:34:48 WARN]: at javax.xml.bind.JAXB._marshal(JAXB.java:559)
[13:34:48 WARN]: at javax.xml.bind.JAXB.marshal(JAXB.java:317)
[13:34:48 WARN]: at me.taucu.server.minevictus.minesuiteus.Minesuiteus.marshalFile(Minesuiteus.java:702)
[13:34:48 WARN]: at me.taucu.server.minevictus.minesuiteus.Minesuiteus.testXml(Minesuiteus.java:195)
[13:34:48 WARN]: at me.taucu.server.minevictus.minesuiteus.Minesuiteus.onEnable(Minesuiteus.java:148)
[13:34:48 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263)
[13:34:48 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337)
[13:34:48 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:435)
[13:34:48 WARN]: at org.bukkit.craftbukkit.v1_15_R1.CraftServer.enablePlugin(CraftServer.java:470)
[13:34:48 WARN]: at org.bukkit.craftbukkit.v1_15_R1.CraftServer.enablePlugins(CraftServer.java:384)
[13:34:48 WARN]: at net.minecraft.server.v1_15_R1.MinecraftServer.a(MinecraftServer.java:482)
[13:34:48 WARN]: at net.minecraft.server.v1_15_R1.DedicatedServer.init(DedicatedServer.java:299)
[13:34:48 WARN]: at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:885)
[13:34:48 WARN]: at java.base/java.lang.Thread.run(Thread.java:830)
[13:34:48 WARN]: Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
[13:34:48 WARN]: - with linked exception:
[13:34:48 WARN]: [java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
[13:34:48 WARN]: at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:232)
[13:34:48 WARN]: at javax.xml.bind.ContextFinder.find(ContextFinder.java:375)
[13:34:48 WARN]: at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691)
[13:34:48 WARN]: at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632)
[13:34:48 WARN]: at javax.xml.bind.JAXB$Cache.<init>(JAXB.java:97)
[13:34:48 WARN]: at javax.xml.bind.JAXB.getContext(JAXB.java:124)
[13:34:48 WARN]: at javax.xml.bind.JAXB._marshal(JAXB.java:548)
[13:34:48 WARN]: ... 13 more
[13:34:48 WARN]: Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
[13:34:48 WARN]: at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
[13:34:48 WARN]: at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
[13:34:48 WARN]: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
[13:34:48 WARN]: at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:92)
[13:34:48 WARN]: at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:125)
[13:34:48 WARN]: at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:230)
[13:34:48 WARN]: ... 19 more
[13:34:48 ERROR]: [Minesuiteus] Exception while testing XML marshalling, cannot continue
[13:34:48 INFO]: [Minesuiteus] Disabling Minesuiteus v0.3.7
[13:34:48 INFO]: [Minesuiteus] Disabling Modules...
[13:34:48 INFO]: [Minesuiteus] Disabling Utilities...
[13:34:48 INFO]: [Minesuiteus] Shutting down executer services...

这是代码:

    public static void marshalFile(Object obj, File clazzFileLocation) {
JAXB.marshal(obj, clazzFileLocation);//Trying simple method in-case I did something wrong
/*FileOutputStream out = null;
try {
out = new FileOutputStream(clazzFileLocation);
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(obj, out);
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}*/
}

unmarshal 使用大部分相同的简单 JAXB#unmarshal(file, clazztype) 方法

是的,我尝试将阴影库重新定位到 com.sun.xml.internal.bind...但不幸的是,是的,我已经检查过它们确实在那里。

我知道 bukkit 使用非系统类加载器来加载插件(这是有道理的),但我认为这就是导致问题的原因。

我已将插件作为独立测试运行,并且它有效,因此这里唯一的变量似乎是 Bukkit 以及它如何加载库。我以这种方式使用其他库没有问题,这是第一个。

我的独立测试

    public static void main(String[] args) throws IOException, ClassNotFoundException {
Console console = System.console();
Logger log = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
if (console == null && ClassLoader.getSystemClassLoader() == Main.class.getClassLoader()) {
PrintStream o = new PrintStream(new File("Minesuiteus-Headless.log"));
System.setOut(o);
System.setErr(o);
log.info("Running in headless mode");
log.info("### LOG START ###");
} else {
log.info("### START ###");
}
System.out.println();

log.info("Testing XML");
JAXB.marshal(new TestXML(), new File("./test.xml"));
TestXML t = JAXB.unmarshal(new File("./test.xml"), TestXML.class);
if (t == null) {
System.out.println("Test returned null, not working");
} else {
System.out.println("Test worked!");
}
log.info("Finished.");
}

有什么建议吗?

问候陶

最佳答案

这些依赖项可能已从服务器中删除并且不再可用。尝试在谷歌上搜索并找到该依赖项的更新版本。还要检查彼此依赖项之间的兼容性。

PS:检查是否下载了Maven。我也很挣扎,然后发现我没有下载Maven。

堆栈跟踪的说明:找不到依赖关系。无法创建具有依赖关系的类。需要依赖的类中出现错误。

检查服务器上的Java版本是否与您计算机上的相同。尝试创建不同版本的依赖项,因为 Maven 中央存储库可能存在问题。检查您是否使用了仅适用于某些操作系统的 native 方法。

另一个问题是您没有在计算机上的服务器上上传一些jar。

检查您下载的 bukkit 版本是否适用于您的 JDK 版本。

关于java - (Java 12) 当库作为插件加载时 JAXB 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60795639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com