0

アプリケーションサーバーにデプロイされた抽象クラス(と呼びましょうClassA)が付属するJava Webアプリケーションがあります。このJava Webアプリケーションは、この質問の受け入れられた応答に対するアプローチを使用して、外部jarからクラスを動的にロードします。

ClassBから拡張するクラスをロードするまで(それを呼び出す)、すべてが正常に機能しますClassA。クラスをロードする行を指しているjava.lang.ClassNotFoundException: ClassAエラー メッセージが SysOut に表示されます: urlClassLoader.loadClass(className);

を呼び出すと、デフォルトの親クラス loader からURLClassLoader.newInstance()作成されるため、問題はないと思いました。SystemClassLoader

  • 私の仮定は間違っていますか?

  • WebApplication クラスローダーにロードされた親クラスからたまたま拡張された外部 Jar からクラスをロードするにはどうすればよいですか?

WebApp の展開構成を親が最初から最後に親に変更しようとしたところ、同じエラーが発生しました。Class.forName("ClassA")行を実行する前に試してみましURLClassLoader.loadClass("ClassB")たが、同じエラーが再び発生しました。

4

1 に答える 1

1

の子であるClassAコンテナによってロードされているようです。あなたの習慣はあまりにもの子であり、それが「見えない」理由です。WebAppClassLoaderSystemClassLoaderURLClassLoaderSystemClassLoaderClassBClassA

問題を解決するには、またはその子ClassBによってロードする必要があります。次のWebAppClassLoader方法で実現できます。

ClassLoader webAppCL = ClassA.class.getClassLoader();
URLClassLoader myCL = new URLClassLoader(urls, webAppCL);
于 2016-03-09T15:25:38.973 に答える