Подтвердить что ты не робот

Как запустить несколько основных программ в исполняемом файле .jar?

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

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

4b9b3361

Ответ 1

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

java -jar myapp.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, каждая из которых будет работать в своем собственном процессе. Очевидно, что это не соответствует вашему требованию для "исполняемой банки".

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

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

Ответ 2

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

Ответ 3

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

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

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