0

マルチエージェント開発のプラットフォームとなることを目的としたJavaプロジェクトを継承しました。アイデアは、プラットフォーム上で実行される「アプリケーション」を作成できるということです。エンドユーザーがアプリケーション(jarにパッケージ化されている可能性が高い)を事前定義されたフォルダーに追加し、プラットフォームが読み取るマニフェストファイルにそのjarの存在への参照を追加できるように、ベースプラットフォームを配布する方法を探しています。したがって、そこからファイルにアクセスできます。

私は次の答えを見てきましたが、これらはプラットフォームコードが設計時にクラスの名前を知っていることを要求しているようです:

理想的には、次の構造が機能するようにしたいと思います。

  • メインディレクトリ:platform.jar、apps.manifest、Apps(ディレクトリ)
  • Apps / App1 / app1.jar、Apps / App2 / app2.jar、...、Apps / AppN / appN.jar

apps.manifestには、各アプリのエントリが含まれます。これには、jarへのパスと、メインのアプリケーション(共通インターフェイスを実装する)オブジェクトであるクラスの名前が含まれます。

platform.jarのメインコードで、マニフェストを読み、N個のアプリケーションがあることに注意してくださいApplicationOne appOne = new ApplicationOne(this)。ここApplicationOneで、はプライマリアプリケーションオブジェクトの名前であり、app1.jarはからthisのオブジェクトへの参照です。platform.jarアプリケーションへの参照。

すべてのjar(platform.jarおよびアプリケーションjar)がすべてユーザーのクラスパスにある場合、すべて上記のように機能しますか?もしそうなら、Javaのユーザーのクラスパスにディレクトリ(およびすべてのサブディレクトリ)を一時的に追加する方法はありますか?実行すると実行できますplatform.jarか?囲んでいるフォルダはファイルシステム上で移動可能でなければならないので、一時的にお願いします。

この問題に関するアドバイス、および質問をより明確で読みやすくするための改善に関するアドバイスを歓迎します。

ありがとう

4

1 に答える 1

1

ServiceLoaderAPIが役立つかもしれないように聞こえます。

サービスは、よく知られているインターフェイスと(通常は抽象)クラスのセットです。サービスプロバイダーは、サービスの特定の実装です。プロバイダーのクラスは通常、インターフェースを実装し、サービス自体で定義されたクラスをサブクラス化します。サービスプロバイダーは、拡張機能の形式でJavaプラットフォームの実装にインストールできます。つまり、jarファイルは通常の拡張機能ディレクトリのいずれかに配置されます。

使用法については、このブログエントリを参照してください

于 2012-11-12T23:39:45.460 に答える