2016-04-23 8 views
0

プラグイン用のモジュールを作成しています。メインアプリケーションはプラグインをロードし、プラグイン用のモジュールをロードします(Main Application --Loads Plugins - > My Plugin --Loads Modules - > My Module)。動的に読み込まれたjarのメインjarメソッドの使用

私は動的にプラグインにロードするjar(私たちはdynamicJarと呼ぶ)を持っています。問題は、私はdynamicJarの内部の主要アプリケーションからのメソッドを実行することができるということです

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 

、私:私が持っている問題は、私はdynamicJarに私のプラグインからのメソッドやクラスを使用する場合、私はがNoClassDefFoundエラーを取得していますdynamicJarの内部でプラグインのメソッドを使用することはできません。

TL; DR:プラグインjarからのクラスを使用すると、動的にロードされたjarからClassNotFoundExceptionおよびNoClassDefFoundErrorが使用されたときにスローされます。

EDIT:

ここでは、私は私のクラスパスにjarファイルをロードするために使用していたコードです。

Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class}); 
    method.setAccessible(true); 
    method.invoke(ClassLoader.getSystemClassLoader(), new Object[]{file.toURI().toURL()}); 
+0

これは、ClassLoaderの問題のような臭いです。そうしないとコードを提供する必要があります。助けが難しいです。 –

+0

@NicolasFilottoコードでメインポストを編集しました –

+0

システムClassLoaderを使用してプラグインとモジュールを定義しましたか? –

答えて

0

私の代わりにそれ自身のクラスローダまたはシステムクラスローダの、プラグインのクラスローダにクラスをロードすることで問題を解決しました。今は完璧に動作します。

+0

あなた自身で答えを見つけることができたことを知ってうれしく思います –

関連する問題