2013-06-19 1 views
2

Я присоединился к двум отдельным JAR-серверам, которые поделились большим количеством кода, в один JAR. Пока нет проблем, так как вы можете иметь более одного static void main() в JAR.JAR с несколькими основными() - как начать второе приложение с первого раза?

Основное применение вызывается непосредственно:

java -jar myjar.jar arg1 arg2 

Другое приложение требует явного вызова из ее альтернативной main():

java -classpath myjar.jar alternative.main arg1 

Не большая проблема либо.

Однако, теперь я должен вызвать альтернативный приложение из в основной.

Я мог бы сделать это:

Runtime.getRuntime().exec("java -classpath myjar.jar alternative.main arg1"); 

Но это кажется мне не хватает какой-то утонченность. Есть ли еще более эффективный способ запускать второй вариант, альтернативный main()?

+2

Если в одном банке в любом случае, вы не можете просто ** ** вызов другой 'main' метод? Или вам нужны отдельные процессы операционной системы/JVM? –

+0

1) Если вы вернетесь к использованию 'Process'. Прочитайте (и внесите) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. 2) Это действительно пахнет плохим дизайном, если только первое приложение. это приложение. панель запуска пульта. –

+0

@AndrewThompson: Плохой дизайн, это должно быть одно приложение для начала. К сожалению, иногда вам приходится жить с суб-пар-дизайнами, потому что полномасштабный рефакторинг не вписывается в бюджет ... – DevSolar

ответ

1

Если это нормально для обоих основных приложений для работы в одной JVM, а вызов синхронный, это должно работать.

String[] args = { "arg1" }; 
alternative.main.main(args); 

Если вызов не должен быть синхронным, но может быть другой поток в пределах одной и той же виртуальной машины Java, то вы можете создать новую тему, которая вызывает альтернативный метод main.

Если это отдельный процесс/JVM, то то, что вы делаете, работает достаточно хорошо. Кроме того, вы можете использовать java.lang.ProcessBuilder.

1

ли вы попробовать

alternative.main.main(new String[]{arg1}); 
+0

У меня есть, и это провалилось, но, как выяснилось, совершенно несвязанная причина. ;-) – DevSolar

 Смежные вопросы

  • Нет связанных вопросов^_^