在另一个进程(VM)中启动Java main
我有一个服务器客户机项目,出于测试目的,我想在一个全新的过程中启动服务器。问题是,我在project中只有一个main()方法,没有jar。我猜大概是这样的在另一个进程(VM)中启动Java main,java,eclipse,compiler-construction,junit,jvm,Java,Eclipse,Compiler Construction,Junit,Jvm,我有一个服务器客户机项目,出于测试目的,我想在一个全新的过程中启动服务器。问题是,我在project中只有一个main()方法,没有jar。我猜大概是这样的 Runtime.getRuntime().exec("javac MyServer.java"); Runtime.getRuntime().exec("java class MyServer"); 但我真的不确定,而且我也不完全喜欢为每个测试用例启动javac的需要 我应该如何进行 编辑 我想在@Before方法中启动进程,并在@Aft
Runtime.getRuntime().exec("javac MyServer.java");
Runtime.getRuntime().exec("java class MyServer");
但我真的不确定,而且我也不完全喜欢为每个测试用例启动javac的需要
我应该如何进行
编辑
我想在
@Before
方法中启动进程,并在@After
中销毁它。它必须自动运行,因此不能手动打开服务器。我所寻找的是一种消除服务器类编译的方法。但是现在我想没有其他方法了。如果这是出于测试目的,只需从命令行启动另一个进程,或者使用Eclipse来处理它。在Eclipse中,同一个项目可以有多个main()入口点。当您希望运行应用程序时,您将创建一个运行/调试配置,该配置说明您希望调用哪个入口点。因此,您可以为客户端和服务器分别定义一个,并通过单击按钮来运行它们
扩大:
先决条件-在执行任何操作之前,首先将项目导入Eclipse
Eclipse还有一个调试透视图,您可以在其中停止/暂停正在运行的进程、设置断点等等。它甚至可以同时调试多个进程,这样您就可以在调试中启动客户端和服务器,并在调用的任一侧设置断点。如果这是出于测试目的,只需从命令行启动另一个进程或使用Eclipse来处理它。在Eclipse中,同一个项目可以有多个main()入口点。当您希望运行应用程序时,您将创建一个运行/调试配置,该配置说明您希望调用哪个入口点。因此,您可以为客户端和服务器分别定义一个,并通过单击按钮来运行它们 扩大: 先决条件-在执行任何操作之前,首先将项目导入Eclipse
Eclipse还有一个调试透视图,您可以在其中停止/暂停正在运行的进程、设置断点等等。它甚至可以同时调试多个东西,这样您就可以在调试中启动客户端和服务器,并在调用的任一侧设置断点。Java允许您这样进行系统调用
Runtime r = Runtime.getRuntime();
Process p = r.exec("java otherMain arg0 arg1");
这将允许您启动另一个java进程。如果需要的话,进程还有一些方法可以获取该进程的输出。Java允许您这样进行系统调用
Runtime r = Runtime.getRuntime();
Process p = r.exec("java otherMain arg0 arg1");
这将允许您启动另一个java进程。如果您需要,Process还有一些方法可以获取该进程的输出。请看一看,我认为您要做的是在运行服务器的情况下对客户端运行一系列测试。您可以通过编写一个JUnit测试来实现这一点,该测试利用注释在每次测试之前运行一个安装方法。例如:
import org.junit.Before
public class TestClient {
private static final int port = 20000 + new Random().nextInt(10000);
private MyServer server;
@Before
public void setup() {
// setup server
server = new MyServer(port);
server.start();
}
@Test
public void testX() {
// test x
}
@Test
public void testY() {
// test y
}
}
看一看,我认为您要做的是对您的客户机运行一系列测试,同时运行一个服务器。您可以通过编写一个JUnit测试来实现这一点,该测试利用注释在每次测试之前运行一个安装方法。例如:
import org.junit.Before
public class TestClient {
private static final int port = 20000 + new Random().nextInt(10000);
private MyServer server;
@Before
public void setup() {
// setup server
server = new MyServer(port);
server.start();
}
@Test
public void testX() {
// test x
}
@Test
public void testY() {
// test y
}
}
好吧,假设这将启动一个新的JVM(我不太相信,但不知道),我对exclipse真的很陌生,在运行配置中找不到您所说的内容。您能再给我一点指导吗?我已经更新了我的回答,介绍了如何在Eclipse中调试的步骤。Eclipse可以根据您的需要生成尽可能多的Java实例。它甚至可以生成J2EE应用程序服务器,甚至允许您指定要使用的JRE