Java RMI クライアント/サーバー アプリを作成しようとしています。アプリのサーバー側を起動しようとすると、Registry.bind() メソッドの呼び出し中にClassNotFoundExceptionが発生し続けるため、アプリのサーバー側を起動するときに問題が発生します。
ここの簡単なチュートリアルから始めました: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html。これらの指示に従った後、最初は「example.hello.Hello」が見つからないことを訴える ClassNotFoundException をスローしていました。rmiregistryはどうやらクラスパスの一部として最初の開始ディレクトリを使用するため、チュートリアルのdestDirディレクトリからrmiregistry を開始することで解決できました。
その後、別のテスト アプリを使い始めましたが、サーバー クラスでサードパーティの jar ファイルを使い始めるまでは問題ありませんでした。現在、rmiregistry アプリはこれらの jar ファイルを認識していないため、私のサーバー クラスが任意の jar ファイル内の何かを参照している場合、Registry.bind() は ClassNotFoundException をスローします。
私が知る限り、rmiregistry はクラスパスの起動引数を一切受け入れないので、認識させたいクラスパスをどのように伝えることができるのか疑問に思っています。http://docs.oracle.com/javase/tutorial/rmi/running.htmlのチュートリアルによると、「rmiregistry を実行するシェルまたはウィンドウにCLASSPATH 環境変数が設定されていないか、リモート オブジェクトのクライアントにダウンロードするクラスへのパスを含まない CLASSPATH 環境変数があります。」それは私が必要としているものとは正反対のように聞こえます... それとも私の読み方が間違っているのでしょうか? サードパーティの jar (私の場合は commons-io、commons-logging、および rmiio) を使用する RMI クライアント/サーバーの起動に成功した人はいますか?
ちなみに、これはWindows上です。
更新
私はそれを回避する方法を見つけました。以下の私の答えを見てください。