Ответ 1
Вы можете вызвать основной метод любого класса напрямую. Например, если у вас есть сервер и клиентский класс, и вы хотите запустить один сервер и два клиента, вот что вы можете сделать.
public class Server {
public void main(final String ... $Args) {
final Server S = new Server();
S.config($Args);
S.run();
}
}
public class Client {
public void main(final String ... $Args) {
final Client C = new Client();
C.config($Args);
C.run();
}
}
public class Test_ServerClient {
public void main(final String ... $Args) {
Server.main('server1.cfg');
Client.main('client1.cfg');
Client.main('client2.cfg');
}
}
Готово!
Ну, почти. Вы можете захотеть сделать некоторую задержку перед вызовом основной части клиента, чтобы убедиться, что сервер работает правильно.
Можно подумать. Все сервер и клиенты будут работать на одной и той же JVM. В большинстве случаев (вы просто хотите проверить его взаимодействие и не имеете никакого отношения к загрузке классов, поскольку это будет вести себя по-другому, если они не находятся на одном JVM), это должно быть хорошо. Если вы действительно хотите, чтобы он выполнялся на разных JVM, вы можете использовать Ant для их запуска.
Что-то вроде этого:
<project name="TestServerClient" default="test" basedir=".">
<target name="test">
<java classname="my.Server">
<arg value="server1.cfg"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
<java classname="my.Client">
<arg value="client1.cfg"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
<java classname="my.Client">
<arg value="client2.cfg"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
</target>
</project>
Итак, вы можете просто запустить этот Ant, и это все.
Надеюсь, что это поможет.