5

私がエンドユーザー ソフトウェア プログラムを (uberjar として) 開発していることを考えると、ユーザーがプラグインをダウンロードして実行時にそれをロードできるようにするためのオプションを考えています。

プラグインはコンパイルされ、ソースコードなしで提供されるはずなので、sth. likeloadはオプションではありません。これを構築するために存在する既存のライブラリ (または Java の方法...?) は何ですか?

編集:よくわからない場合は、メインプログラムの再起動/開始に費用がかかる方法にも満足します。ただし、重要なのは、ソースコードがどの JAR ファイルにも含まれないことです (メインアプリケーションでもプラグイン jar でもありません。Leiningen ドキュメントの :omit-source を参照してください)。

4

3 に答える 3

5

実行時に jar を追加するには、.jar ファイルをクラスパスに追加できるpomegranateを使用します。ソフトウェアのプラグインは、確立する必要がある特定の規則に従う通常の Clojure ライブラリである必要があります。

  1. Stuart Sierrasコンポーネントライブラリednのプロトコルなどのコンストラクタ/デストラクタ メカニズムを実装するオブジェクトにシンボルを(たとえば で) 提供するようにします。実行時に、そのシンボル、結果のオブジェクトを渡して、プログラムのプラグイン調整機能を休止します。Lifecyclerequireresolvestart

  2. プログラムにパブリック API を提供して、プラグインが非同期に調整する方法で対話できるようにしますclojure.core.async(1 つのプラグインがプログラム全体をブロックしないようにします)。

  3. プラグイン間で高度なモジュール性を実現したい場合にのみ、プラグインが相互に機能を公開する調整された方法を備えていることを確認してください。プラグインローダーがプラグイン間の依存関係を検出でき、正しい順序でそれらをロードおよびアンロードできることを確認してください。

于 2014-01-09T23:10:58.747 に答える
1

私自身は試したことはありませんが、理論的にはOSGiを Clojure で動作させることができるはずです。

ここに Clojure / OSGi 統合ライブラリがあります。

于 2013-07-31T14:51:10.403 に答える