3

jar をフォルダーにドロップして、後で呼び出すことができる関数をスキャンできるフレームワークを開発しています。私の最初の実装では、単純な ClassLoader メソッドを使用して、jar をロードし、クラス インスタンスを作成しました。これがプラグイン アーキテクチャです。私が遭遇した問題はバージョン管理です。たとえば、ホスト アプリが org.joda time バージョン 1.6 に依存するサードパーティ ライブラリを使用しており、プラグインが同じ (新しい) ライブラリのバージョン 2.1 に依存しているとします。Java Simple Plugin Frameworkを使ってみたしかし、カスタム クラス ローダーを使用してプラグインをロードしていないようです (これは、バージョンの競合を克服し、2.1 バージョンを実際にロードする必要があると私が想定しているものです)。私の次のステップは、osgi を試すことです。だから、問題は次のとおりです:これは正しいアプローチですか、それとも私が知らない簡単な方法がありますか?それのJavaバージョン。私はScalaで開発していますが、それは主な質問には関係ありません。

4

2 に答える 2

3

ScalaScriptEngineを試してください。ソースファイルからクラスを動的にロードしてコンパイルすることができ、かなりの数の高度な機能をサポートしています。

于 2013-01-22T04:26:58.687 に答える
3

同様のユースケースがありました。あなたが説明したような単純なプラグイン フレームワークが欲しかったのですが、OSGi に飛び込む準備ができていませんでした。私はカスタムクラスローダールートに行きましたが、あなたと同じ問題に遭遇しました. 私はParent-Last Classloaderを試しましたが、これはjarの競合のいくつかを助けました。それは検討すべきことかもしれません。CI Server Jenkinsがプラグイン システムに対して行ったことをかなり真剣に調べたところ、この記事が興味深いものであることがわかりました。

最終的には、サービスがいつ出入りするかを追跡できるようにする必要があり、サービス レジストリを用意する必要がありました...そして、OSGi を再発明していることに気付きました。私は純粋な OSGi に切り替えました。学習曲線があり、時には苦痛になることもありますが、切り替えてよかったと思っています。

于 2013-01-18T18:38:19.960 に答える