0

Java でアプリケーション プラグインを作成していますが、プラグインはいくつかのサードパーティ JAR に依存しています。これらの依存関係をプラグインにバンドルして、1 つの JAR ファイルだけをデプロイできるようにしています。

ホスト アプリケーションは、他のベンダーのプラグインを実行している場合もあります。残念ながら、ホスト アプリケーションはすべてのプラグインをクラスパスに配置しており、この動作を変更することはできません。別のベンダーのプラグインが私の前に読み込まれ、依存関係の互換性のないバージョンを使用している場合、私のプラグインがクラッシュする可能性があります。

自分のプラグインと他のプラグインとの互換性を事前にテストすることができません。また、プラグイン間に非互換性があると言うのも受け入れられません。プラグインがクラッシュすると、会社に悪影響を及ぼします。顧客は、私のプラグインがクラッシュする理由を気にしません。彼らは、私の側のプログラミングが不十分であると考えます。

他のベンダーのプラグインが自分のプラグインに干渉するのを防ぐ方法を探しています。出来ますか?

カスタム クラスローダーについて聞いたことがありますが、その解決策がうまくいくかどうかはわかりません。

4

2 に答える 2

1

Uberjarを使用できます。custom namespace依存関係の名前空間が異なるため、クラスが衝突しないように、すべてのjar/クラスをに移動します。

あなたはmaven-shadeを見たいかもしれません

于 2013-07-26T14:12:56.143 に答える
0

プラグインにOSGi コンテナーを埋め込んでみることができます。これにより、OSGi バンドルとして依存関係をシステム クラスローダーから分離して実行およびロードできるようになります。

フェリックスへの指示

于 2013-07-26T14:30:01.063 に答える