0

ヘイホー、

この設定があるとしましょう:

アプリケーション->プラグイン->モジュール

「プラグイン」と「モジュール」は「アプリケーション」に依存します。

アプリケーションはバージョン 1.0 のライブラリを使用しています。モジュールは同じライブラリに依存しますが、バージョン 2.0. クラスは同じですが、いくつかのメソッドが 2.0 で削除され、いくつかが追加されました。Pluginapplicationの親 ClassLoader を使用し、moduleはpluginの親 ClassLoader を使用します。

ここでの問題は、モジュールがライブラリのバージョン 1.0 を使用しているが、2.0 に依存していることです ->たとえば、メソッドが見つかりません

これを修正する適切な方法は何でしょうか? バージョン 2.0 を再配置することでうまくいくかもしれませんが、実行時に回避策があるかもしれません。問題を解決するためにクラスローダーを変更することは可能かもしれません。

マックス

4

1 に答える 1

1

オプションは次のとおりです。

  1. アプリケーションを 2.0 にアップグレードする
  2. プラグインを 1.0 にダウングレードします (それでも動作することを願っています)
  3. アプリケーションの「コア」をネストされたクラスローダーに移動します
  4. プラグイン/モジュールのクラスローダーを変更して、「親が最初」にならないようにします。これは非常に大ざっぱなオプションであり、正しく行わないと本当に混乱する可能性があることに注意してください。

オプション 3. は次のようになります。

Application Base -> plugin -> module (lib 2.0)
                 -> Application Core (lib 1.0)

これにより、本質的にプラグインとアプリケーションのコア ピアが作成されるため、クラスローダーの問題はなくなりました。

于 2013-07-28T19:07:19.433 に答える