Запустите Java main в другом процессе (VM) - PullRequest
0 голосов
/ 31 августа 2010

У меня есть серверный клиентский проект, и в целях тестирования я хочу запустить сервер в совершенно новом процессе.Проблема в том, что у меня есть только метод main () в проекте, а не jar.Так что мое предположение будет примерно таким:

Runtime.getRuntime().exec("javac MyServer.java");
Runtime.getRuntime().exec("java class MyServer");

Но я действительно не уверен в этом, а также мне не нравится необходимость запуска javac для каждого тестового случая.

Как следуетЯ продолжаю?

РЕДАКТИРОВАТЬ

Я хочу запустить процесс методом @Before и уничтожить его в @After.Он должен запускаться автоматически, поэтому ручное включение сервера невозможно.То, что я искал, это способ избежать компиляции серверного класса.Но теперь я думаю, что нет другого пути.

Ответы [ 3 ]

2 голосов
/ 31 августа 2010

Если это для целей тестирования, просто запустите другой процесс из командной строки или используйте Eclipse, чтобы позаботиться об этом.В Eclipse один и тот же проект может иметь несколько точек входа main ().Когда вы хотите запустить приложение, вы создаете конфигурацию запуска / отладки, в которой указано, какую точку входа вы хотите вызвать.Таким образом, вы можете определить один для клиента и один для сервера и запустить их одним нажатием кнопки.

Расширенный:

Предварительное условие - сначала импортируйте ваш проект в Eclipse, прежде чем делать что-либо из этого.

  1. Запустите Eclipse с точки зрения Java (что обычно имеет место для проекта Java)
  2. Вы увидите две кнопки панели инструментов с пометкой Debug As ... и Run As ...Теперь я опишу кнопку «Отладка», но тот же принцип применим к «Запуск от имени».
  3. Рядом с кнопкой «Отладка как ...» находится кнопка раскрывающегося списка.Щелкните по нему и в раскрывающемся списке выберите «Отладочные конфигурации» ...
  4. Откроется диалоговое окно конфигурации.В диалоговом окне дважды щелкните «Приложение Java».Eclipse создаст новую конфигурацию отладки для отладки приложения Java.
  5. Используйте поля справа, чтобы выбрать, какой проект Eclipse вы отлаживаете, основной класс (т. Е. Тот, со статической главной, которую вы хотите вызвать) и любые другие аргументы, которые вы хотите установить.Вы можете дать своей конфигурации осмысленное имя и применить изменения.
  6. Создайте две конфигурации, одну для вашего клиента и одну для вашего сервера, например, «отладочный клиент» и «сервер отладки»
  7. Выход изdialog
  8. Теперь в раскрывающемся списке «Отладка как ...» содержатся два действия с вашими новыми конфигурациями.Вы можете нажать на них, чтобы запустить ваши приложения в режиме отладки.Вы увидите, что каждый экземпляр выполняется в отдельном процессе java.exe.

Eclipse также имеет перспективу отладки, в которой вы можете останавливать / приостанавливать запущенные процессы, устанавливать точки останова и еще много чего.Он даже может отлаживать более чем одну вещь одновременно, так что вы можете запустить клиент и сервер в режиме отладки и установить точки останова по обе стороны от вызова.

1 голос
/ 31 августа 2010

Java позволяет вам делать системные вызовы следующим образом.

 Runtime r = Runtime.getRuntime();
 Process p = r.exec("java otherMain arg0 arg1");

Это позволит вам запустить другой процесс Java.Процесс также имеет методы для получения результатов этого процесса, если вам это нужно.

0 голосов
/ 31 августа 2010

Взгляните на JUnit , и я думаю, что вы хотите выполнить серию тестов для вашего клиента с запущенным сервером. Это можно сделать, написав тест JUnit, в котором используется аннотация @ Before для запуска метода настройки перед каждым тестом. Например:

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
    }
}
...