Как запустить несколько основных программ в исполняемом файле Java .jar? - PullRequest
16 голосов
/ 11 мая 2011

Я пишу программу, которая содержит несколько пакетов.Каждый пакет имеет свою собственную основную программу, которую я хочу, чтобы все запускались одновременно, когда .jar выполняется интерпретатором.Это кажется довольно простым вопросом, но когда я оглядываюсь вокруг, кажется, что люди используют муравьев (которых я никогда раньше не использовал) и другие методы.Есть ли в Eclipse более простой способ компилировать .jar с несколькими конфигурациями запуска, а еще лучше, есть ли способ жестко закодировать его в?

Если лучший способ запустить это через муравей.Какой вид ant-скрипта я бы написал, если бы захотел запустить ... скажем, основные программы в пакетах com.myapp.package1.main, com.myapp.package2.main и com.myapp.package3.main.Заранее спасибо!

Ответы [ 3 ]

25 голосов
/ 11 мая 2011

Манифест jar позволяет указать не более одного основного класса. Это вызывается, когда вы выполняете java с флагом -jar.

java -jar myapp.jar

Вы можете включить несколько основных классов в один jar, но каждый (кроме необязательного 1 выше) должен вызываться с использованием флага -classpath и с указанием полного имени основного класса.

java -classpath myapp.jar com.mypackage.app.Main01 && \
  java -classpath myapp.jar com.mypackage.app.Main02 && \
  java -classpath myapp.jar com.mypackage.app.Main03

В приведенном выше примере будут созданы три отдельные виртуальные машины Java, каждая в своем собственном процессе. Очевидно, это не соответствует вашему требованию к «исполняемому банку».

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

Муравей не подходит для решения этой проблемы. Я подозреваю, что вам, вероятно, нужен единственный основной метод, который порождает несколько потоков. Не стесняйтесь предоставить больше информации о ваших требованиях.

1 голос
/ 11 мая 2011

Вы можете создать один основной «главный» класс, который выполняет остальные.

0 голосов
/ 11 мая 2011

Возможно, я бы придерживался решения MANIFEST, но есть еще одна возможность сделать это:

Process p = Runtime.getRuntime().exec("java -jar another.jar");

Но здесь вы должны быть осторожны с путем и должны правильно завершить процесс, иначе ваша машина может достичь предела для файловых дескрипторов.

...