3

次の構造のプロジェクトがあります。

+---main
|   \pom.xml
+---module1
|   \pom.xml
+---module2
|   \pom.xml
+---module3
|   \pom.xml
+---module4
|   \pom.xml
+---pom.xml

モジュールはServiceLoaderメカニズムを使用してサービスを登録します。メインクラスはモジュール内にあり、メカニズムmainを使用してクラスパスにサービスをロードする責任もあります。ServiceLoader問題は、ユーザーが個別にインストールしたため、mainモジュールがmodule1module2module3および を認識しないことです。module4私がしたいのは、プログラムの起動時にこれらのモジュールのすべてのクラスをクラスパスに追加して、 ServiceLoader がこれらのモジュールのサービスを認識できるようにすることです。

現在、モジュールから実行時にこれらのモジュールをロードしmainていますが、IDE がこれらのモジュールを認識しておらず、これらのモジュールをランタイム。Elasticsearch や PrestoDB などのモジュラー Java プロジェクトがこの問題をどのように処理するかを見てきましたが、どちらも実行時にインストールされたモジュールをロードするようです。

モジュラー Java アプリケーションを開発するとき、この問題をどのように処理しますか? ユーザーがインストールしたモジュールのjarファイルを含むpluginsというディレクトリがあるとしましょう。mavenプラグインを使用して、そのディレクトリ内のすべてのjarを含むクラスパスでアプリケーションを起動する方法はありますか? または、実行時にこれらの jar をロードする必要がありますか?

4

1 に答える 1

0

通常、ユーザーはスクリプトから (または構成可能な Java exe ランチャーを備えた Windows で) アプリケーションを起動します。スクリプトでは、次のような方法でプラグイン フォルダーをクラスパスに追加するだけです。

java -cp plugin/* -jar app.jar
于 2015-07-30T01:07:50.820 に答える