嗨,我目前正在将我的Bukkit插件之一更新为Java 12(从8) 其他所有图书馆都顺利进行了(没有更新其中的一些) 但是,正如您大多数人所知,JAX已在J11中完全删除,因此我正在使用these dependencies
在我的胖罐子里。 但是,在编译然后运行它之后,我得到了这个运行时错误:
[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();
}
}
}*/
}
解组器使用了许多相同的简单JAXB#unmarshal(file,clazztype)方法
是的,我尝试将阴影的库重新定位到com.sun.xml.internal.bind ... 但是,不走运,是的,我检查了它们是否确实存在。
我知道bukkit使用非系统类加载器加载插件(这很有意义),但是我认为这是导致问题的原因。
我已经将该插件作为独立测试运行,并且已经运行,因此这里唯一的变量似乎是Bukkit,以及它如何加载lib。这样,我对其他库没有任何问题,这是第一个。
我的独立测试
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.");
}
有什么建议吗?
关于Tau
答案 0 :(得分:0)
这些依赖项可能已从服务器中删除,不再可用。尝试在Google上搜索并找到该依赖项的较新版本。还要检查彼此之间的依赖性之间的兼容性。
PS:检查是否下载了Maven。我也在挣扎,然后发现我没有下载Maven。
您的堆栈跟踪说明: 找不到依赖关系。 不能建立具有依赖关系的类。 需要依赖项的类中的错误。
检查服务器上的Java版本是否与计算机上的Java版本相同。 尝试找到不同版本的依赖项,因为Maven中央存储库中可能存在问题。检查您是否未使用仅适用于某些操作系统的本机方法。
另一个问题是您没有在计算机上的服务器上上传一些jar。
检查是否下载了与JDK版本兼容的bukkit版本。