Ich mache ein Modul für ein Plugin. Die Hauptanwendung lädt das Plugin, welches dann die Module für mein Plugin lädt (Hauptanwendung --Loads Plugins -> Mein Plugin --Loads Module -> Mein Modul).Verwendung der wichtigsten jar Methoden aus dynamisch geladenen jar
Ich habe ein Jar (wir nennen es dynamicJar), die ich dynamisch in mein Plugin geladen werde. Das Problem, das ich habe, ist, wenn ich Methoden und Klassen von meinem Plugin verwenden möge in dynamicJar ich einen NoClassDefFound Fehler:
Caused by: java.lang.NoClassDefFoundError: me/venom/crates/objects/crates/Crate
at me.venom.csgo.CSGOCrate.runCSGO(CSGOCrate.java:135) ~[CSGOCrates.jar:?]
at me.venom.crates.CSGOHelper.runCSGO(CSGOHelper.java:58) ~[?:?]
at me.venom.crates.PListener.onChestInteract(PListener.java:194) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_75]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_75]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_75]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_75]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.9.jar:git-Spigot-1480adb-8b61cc5]
... 17 more
Caused by: java.lang.ClassNotFoundException: me.venom.crates.objects.crates.Crate
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[?:1.7.0_75]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[?:1.7.0_75]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.7.0_75]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[?:1.7.0_75]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[?:1.7.0_75]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[?:1.7.0_75]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[?:1.7.0_75]
at me.venom.csgo.CSGOCrate.runCSGO(CSGOCrate.java:135) ~[CSGOCrates.jar:?]
at me.venom.crates.CSGOHelper.runCSGO(CSGOHelper.java:58) ~[?:?]
at me.venom.crates.PListener.onChestInteract(PListener.java:194) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_75]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_75]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_75]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_75]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.9.jar:git-Spigot-1480adb-8b61cc5]
... 17 more
Das Problem ist, dass ich Methoden aus der Hauptanwendung innerhalb des dynamicJar laufen kann, aber ich kann die Methoden aus dem Plugin nicht innerhalb von dynamicJar verwenden.
TL; DR: Die Verwendung von Klassen aus dem Plug-in-Jar löst eine ClassNotFoundException und NoClassDefFoundError aus, wenn sie aus einem dynamisch geladenen jar verwendet werden.
EDIT:
Hier ist der Code, den ich die Gläser in meine Klasse Pfad zu laden verwenden.
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(ClassLoader.getSystemClassLoader(), new Object[]{file.toURI().toURL()});
Das ist Geruch wie ein ClassLoader Problem, Sie müssen Ihren Code bereitstellen, sonst wird es schwer zu helfen –
@NicolasFilotto Bearbeitete den Hauptpost mit dem Code –
Sie definieren Ihre Plugins und Ihre Module mit dem System ClassLoader? –