Как запустить несколько основных программ в исполняемом файле .jar?
Я пишу программу, содержащую несколько пакетов. Каждый пакет имеет свою собственную основную программу, которую я хочу, чтобы все запускалось одновременно, когда .jar выполняется интерпретатором. Это похоже на довольно простой вопрос, но когда я огляделся, кажется, что люди используют муравьев (которых я никогда раньше не использовал) и других методов. Есть ли более простой способ в Eclipse скомпилировать .jar с несколькими конфигурациями запуска, еще лучше, есть ли способ жестко его кодировать?
Если лучший способ запустить это, используйте ant. Какой тип ant script я напишу, если захочу для запуска... скажем, основные программы в пакетах com.myapp.package1.main, com.myapp.package2.main и com.myapp.package3. главный. Спасибо заранее!
Ответы
Ответ 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");
Но здесь вы должны быть осторожны с путём и должны правильно завершить процесс, иначе ваш компьютер может достичь предела для файловых дескрипторов.