目标:我有一个客户机-服务器程序,在这个程序中客户机和服务器运行在不同的jvm中。为了进行相同的测试,我想在不同的JVM中以编程方式调用Server,然后使用当前的jvm来运行客户端并执行不同的C/S测试。
有没有办法在不同的jvm中以编程方式执行方法或运行Java命令?
发布于 2013-02-05 17:49:12
1) java中运行进程的最强大的工具是ProcessBuilder。
ProcessBuilder pb = new ProcessBuilder("java", "-server", "-jar", "yourJar.jar");
Process p = pb.start();比起使用Process,你可以操纵子进程,例如read InputStream,destroy e.t.c。
2)如果您可以同时编辑两个源代码review this question to build efficient communication between JVM on the same host。如果您不能更改代码,只需创建自己的加载器来加载服务器并实现JVM之间的通信,并调用您需要的方法,因为它位于相同的JVM空间中。
发布于 2013-02-05 17:51:11
实际上,您可以使用以下命令手动运行任何命令
Runtime.getRuntime().exec(command);有关更多信息,请参阅Runtime.getRuntime().exec(...)文档。
但也要注意,使用exec运行任何特定于平台的命令都会破坏程序的平台独立性。
不久前,我看到有人使用"mv“来移动文件。这使得整个程序对于基于Unix的操作系统来说是特定的。Java或任何基于虚拟机的语言的魅力在于它的平台无关性。
发布于 2013-02-05 17:44:07
您可以使用命令行:
Runtime.getRuntime().exec("java -server MyServer")或者,如果您想构建一些更复杂的调用,只需使用http://commons.apache.org/exec/来构建和运行程序。
https://stackoverflow.com/questions/14704272
复制相似问题