目標: クライアントとサーバーが異なる jvm で実行されるクライアント サーバー プログラムがあります。同じことをテストするには、プログラムで別の JVM でサーバーを呼び出し、現在の jvm を使用してクライアントを実行し、さまざまな C/S テストを実行します。
プログラムでメソッドを実行したり、別の jvm で Java コマンドを実行したりする方法はありますか?
1) Java でプロセスを実行するための最も強力なツールはProcessBuilderです。
ProcessBuilder pb = new ProcessBuilder("java", "-server", "-jar", "yourJar.jar");
Process p = pb.start();
Processを使用するよりも、 read InputStream、destroyなどの子プロセスを操作できます
2) 両方のソース コードを編集できる場合は、この質問を確認して、同じホスト上の JVM 間の効率的な通信を構築してください。コードを変更できない場合は、同じ JVM スペースにあるため、サーバーをロードし、JVM 間通信を実装して必要なメソッドを呼び出す独自のローダーを作成するだけです。
を使用して手動で実行する、事実上すべてのコマンドを実行できます。
Runtime.getRuntime().exec(command);
詳細については、Runtime.getRuntime().exec(...) のドキュメントを参照してください。
ただし、exec を使用してプラットフォーム固有のコマンドを実行すると、プログラムのプラットフォームに依存しない性質が失われることにも注意してください。
以前、「mv」を使ってファイルを移動している人を見たことがあります。これにより、プログラム全体が Unix ベースの OS 固有のものになりました。Java または任意の仮想マシン ベースの言語の魅力は、そのプラットフォームに依存しない性質です。
コマンドラインを使用できます。
Runtime.getRuntime().exec("java -server MyServer")
または、より複雑な呼び出しを作成する場合は、http://commons.apache.org/exec/を使用してプログラムを作成して実行します。
私の知る限り、これはプレーンJavaでは不可能です。おそらくグリッド対応のフレームワークは、複数のJVMでJavaプログラムを実行する方法を提供する可能性があります。同様の問題がここで解決されました:
how-to-run-a-java-file-project-in-remote-jvm-which-is-present-in-other-network