[解決済み] JavaでPluginシステムを構築する最適な方法
2022-04-27 07:30:52
質問
Javaアプリケーションのプラグインシステムをどのように実装しますか?
次のようなことを実現する、(開発者にとって)使いやすいシステムは可能でしょうか。
- ユーザーはプラグインをアプリのサブディレクトリに置く
- プラグインは設定画面を提供することができます
- フレームワークを使用する場合、ライセンスは商用開発に対応していますか?
解決方法は?
まず、すべてのプラグインが実装する必要のあるインターフェイスが必要です。
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
プラグイン作者は、自分のプラグインをJARファイルにバンドルする必要があります。アプリケーションは JAR ファイルを開き、JAR マニフェストの属性または JAR ファイル内の全ファイルのリストを使用して、プラグイン・インターフェイスを実装するクラスを見つけることができます。そのクラスをインスタンス化すると、プラグインが使用できるようになります。
もちろん、プラグインができることとできないことを制限するために、ある種のサンドボックスを実装したい場合もあるでしょう。私は、小さな テストアプリケーション (そして ブログで紹介 ) で、2つのプラグインで構成され、そのうちの1つはローカルリソースへのアクセスを拒否されています。
関連
-
IllegalArgumentException この例外を解決する方法
-
JQuery DataTable 详解
-
org.glassfish.jersey.servlet.ServletContainer
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Javaで、オブジェクトの大きさを決定する最も良い方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
java.util.NoSuchElementException 原因解析と解決方法
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
java 例外。Javaツールの初期化