Невозможно запустить Tomcat как внешний инструмент в затмении - PullRequest
1 голос
/ 25 января 2012

Я настроил eclipse, чтобы можно было запускать (для отладки: используя jpda) и останавливать tomcat как программу. Первый раз, когда я запускаю / выключаю tomcat из Eclipse, успешен. Но во второй раз, когда я пытаюсь запустить Tomcat, я получаю следующую ошибку:

FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690]

Я думаю, что порт никогда не закрывается, когда я запускаю shutdown tomcat from eclipse. Если я перезагружаю свой компьютер, порты освобождаются, и я могу снова запустить start tomcat из eclipse. Но каждый раз я не могу перезагрузить компьютер, чтобы он заработал ... в поисках менее радикального решения ...

Так я настроил свое затмение для запуска tomcat в качестве программы.

Configured the external tool configuration in eclipse 
catalina script points to catalina.bat on my Windows machine 
under arguments : jpda run
In the Environment tab.
 "JPDA_ADDRESS" as the name and "8000" as the value
 "JPDA_TRANSPORT" as the name and "dt_socket" as the value
 "JAVA_OPTS" as the name and -server -XX:+UseParallelGC -Xmx768m -XX:MaxPermSize=160m -Djava.awt.headless=true as the value

1 Ответ

1 голос
/ 26 января 2012

Я понятия не имею, как работает Eclipse, но похоже, что вы пытаетесь подключиться к одному и тому же порту JPDA как при остановке, так и при запуске Tomcat. Когда вы запускаете Tomcat, это, очевидно, нормально, но когда вы пытаетесь остановить его - остановка не может быть выполнена, потому что порт уже занят.

Есть много способов решить эту проблему, и я лично использую:

1) Запускать / останавливать Tomcat извне. tomcat/bin/catalina.sh jpda start, tomcat/bin/catalina.sh stop работает из коробки без изменений. Может быть, Eclipse позволяет запускать внешние скрипты?

2) Запустите / остановите Tomcat как простую Java-программу из Eclipse. Таким образом, вам даже не понадобится удаленная отладка, так как ваша программа будет отлаживаемой, как любая другая Java-программа. Мой конфиг IntelliJ выглядит так:

Основной класс: org.apache.catalina.startup.Bootstrap

Параметры VM: -ea -cp $CLASSPATH:/path/to/tomcat/bin/bootstrap.jar -Dcatalina.base="/path/to/tomcat" -Dcatalina.home="/path/to/tomcat" -Djava.io.tmpdir="/path/to/tomcat/temp" -noverify -Xmx400M -XX:MaxPermSize=400M

Параметры программы: start

Рабочий каталог: /path/to/tomcat

Затем вы можете остановить tomcat, просто убив процесс Java или создав подобную среду с stop в качестве параметра программы, который корректно отключит его. Если вы заглянете внутрь catalina.sh, все, что делает этот скрипт, - это на самом деле подготовить все эти параметры и запустить Tomcat таким же образом.

...