2

Когда я запускаю файл Apache Tomcat startup.bat вручную, консоль cmd остается открытой, а когда я запускаю то же самое в коде java, консоль закрывается. (Я пытаюсь автоматизировать некоторые процессы в моем проекте). Для Windows кажется, что когда Tomcat запускается как приложение, консоль должна оставаться открытой после запуска .bat.

Как я могу сделать это для моего кода Java? Спасибо

2 ответа2

1

Startup.bat зависит от двух переменных env: CATALINA_HOME и JRE_HOME (или JAVA_HOME).
У вас должен быть установлен JRE_HOME или JAVA_HOME, иначе вы не сможете запустить автозапуск двойным щелчком мыши.
Это оставляет нас с CATALINA_HOME. Сценарий запуска попытается угадать его, если он не установлен, но это работает, только если он выполняется из своего текущего каталога (или, если быть точным, его родителя). Если вы попытаетесь запустить его из другого каталога, а CATALINA_HOME не будет установлен, произойдет сбой (с сообщением об этом).
Если это ваша проблема, вы должны увидеть подобное сообщение в верхней части окна cmd:

Переменная среды CATALINA_HOME не определена правильно. Эта переменная среды необходима для запуска этой программы.

Еще одна проблема, с которой вы можете столкнуться, это когда ваш путь содержит пробелы. Похоже, что нет, но все же может быть полезным для других, поэтому я добавлю эту информацию.
Когда ваша команда содержит пробелы, вам нужно заключить в кавычки команду start , верно? Это должно сделать: "cmd.exe /c start \"my path to tomcat bin/startup.bat\""
Неправильно. В итоге вы бросаете взгляд на командное окно под названием мой путь к tomcat bin /startup.bat
start принимает первый цитируемый аргумент в качестве заголовка ... как хорошо. Правильная форма это:
"cmd.exe /c start \"\" \"my path to tomcat bin/startup.bat\""

Но ждать

обе эти проблемы на самом деле вообще не будут отображать окно Tomcat - вы говорите, что оно закрывается, поэтому оно запускается, а затем умирает. Хм ... это скорее всего потому, что на 8080 уже прослушивается процесс. Может быть, ваш Java IDE запускает Tomcat? Или запускает другой сервер прослушивания на 8080? Если это причина, вы должны увидеть похожую строку в журнале Tomcat (они хранятся в CATALINA_HOME/logs):

java.net.BindException: адрес уже используется: JVM_Bind

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

Примечание: я использовал следующее, чтобы запустить Tomcat из Java, у меня отлично работает:

    Runtime r=Runtime.getRuntime();
    r.exec("cmd.exe /c start startup.bat",          //path to executable
            null,                                   // env vars, null means pass parent env
            new File("my path to tomcat/bin")); // working directory 
0

Проверьте свойства файла .bat (щелкните по нему правой кнопкой мыши), должна быть опция, позволяющая держать консоль открытой. Последняя вкладка, насколько я помню.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .