2013-02-12 7 views
7

Я уже давно взломал и искал в Интернете, и я нашел несколько потоков переполнения statck, которые, казалось, были написаны для более старых версий intellij с различными серверами приложений. Обычно они говорят вам, чтобы войтиDeploy & Debug remote Jetty с IntelliJ 12

java -Xdebug -Xrunjdwp:transport=dt_socket,address=51887,suspend=n,server=y 

One answer предлагает использовать что-то вроде

-agentlib:jdwp:transport=dt_socket,address=51887,suspend=n,server=y 

Но тогда я получаю это:

Error occurred during initialization of VM 
Could not find agent library: libjdwp:transport.jnilib (searched /Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Libraries:/System/Library/Java/Extensions:/Library/Java/Extensions:.) 

Затем после того, как один или другой из указанных выше они говорят вам что-то вроде «Edit Configurations> jetty> remote и введите localhost, 51887» (номер порта меняется)

Однако в 12, страница, на которую вы попадаете после выбора пульта дистанционного управления, имеет множество опций и запрашивает порты JNDI, а не порты jdwp на другой вкладке, на самом деле предлагает параметры jdwp выше.

Исследуя порта немного JNDI, как правило, дает инструкции для добавления арг, как это в командную строку ...

-Dcom.sun.management.jmxremote= \ 
-Dcom.sun.management.jmxremote.port=1099 \ 
-Dcom.sun.management.jmxremote.ssl=false \ 
-Dcom.sun.management.jmxremote.authenticate=false\ 

Я сделал это слишком, и я могу увидеть порт 1099, принадлежащих Java (с использованием LSOF), и я могу telnet до 1099, поэтому я знаю, что JVM слушает. (Мы постараемся не беспокоиться о том, что, как говорят, открываем порт, через который любой пользователь может установить произвольный код Java по сети на ваш компьютер без пароля)

Однако, в Intellij всякий раз, когда я пытаюсь развертывания и отладки он дает мне следующее сообщение:

Yes, I know it's an ancient version of jetty

Я могу видеть Java RMI связи по 1099, когда я подглядывать порт 1099 с Wireshark (но они неразборчивы). Очевидно, что сообщения Intellij не удовлетворительные, поэтому мне интересно, есть ли что-то, что мне нужно сделать для Jetty, чтобы заставить его играть хорошо. Обратите внимание, что изменение версии Jetty в настоящее время не является опцией, поэтому давайте не будем туда :).

Я также попытался удалить артефакт, отключить make и попытаться просто подключить отладчик, но он по-прежнему дает мне такое же красное сообщение и сообщение об ошибке, поэтому, очевидно, требуется часть JNDI (порт 1099).

Кто-нибудь видит что-то, что я делаю неправильно, или знаю что-то еще, что я должен сделать, чтобы заставить это работать?

(мне интересно, если это что-то похожее на это: http://youtrack.jetbrains.com/issue/IDEA-65746 JBoss выпуск)

Edit: Благодаря this google groups post я обнаружил, что можно получить отладчик связным, если вы этого не сделаете укажите Edit Configurations> +> jetty> remote, но вместо этого выберите Edit Configurations> +> remote, но отладка и развертывание - это то, что мне нужно, так что это всего лишь половина решения.

+0

Я думаю, что факт, что я вижу подключение к 1099 через wirehark, исключает возможность возникновения проблем с DNS. Очевидно, соединение выполнено, но связь не удалась. – Gus

ответ

5

Конфигурация Jetty remote требует нескольких ручных шагов, которые выполняются автоматически при запуске Jetty непосредственно из IDEA с использованием конфигурации local.

Если вы абсолютно необходимо использовать конфигурацию remote, попробуйте выполнить следующие действия:

В Remote staging части вкладки IDEA Jetty конфигурации удаленного запуска Server:

  • указать Same file system для Type и Host
  • указать путь к папке <Jetty home>/contexts в поле Local pathcontexts раздел

(настройки будут отличаться, если у вас есть Jetty работает на другом компьютере, нежели IDEA, но я предполагаю, что это та же машина в вашем случае)

Пропустите следующие параметры виртуальной машины в процессе Jetty:

-Dcom.sun.management.jmxremote= 
-Dcom.sun.management.jmxremote.port=<JNDI port> 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-DOPTIONS=jmx 

<JNDI port> значение должно быть таким же, как указано в JNDI port поле конфигурации запуска IDEA Jetty

Пропустите следующие конфигурационные файлы й е Jetty процесс (в командной строке):

  • etc/jetty-jmx.xml
  • etc/jetty.xml

Если вам нужно отлаживать, вы должны также пройти процесс Jetty параметров VM, взятых из конфигурации запуска IDEA Jetty: Startup/Connection вкладку, выберите Debug элемент списка под To debug remote server JVM ...

Вот пример командной строки для запуска процесса Jetty со всеми необходимыми параметрами:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=60208,suspend=n,server=y -DSTOP.PORT=0 -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -DOPTIONS=jmx -Dfile.encoding=UTF-8 -classpath start.jar etc/jetty-jmx.xml etc/jetty.xml 
+1

обнаружил, что мне не нужно указывать org.mortbay.start.Main. Это отлично поработало, спасибо! – Gus

+0

спасибо за информацию, скорректировал командную строку – CrazyCoder

+0

Пробовал работать на причале, используя локальную конфигурацию и продолжая получать «основной файл не включен». – Shwetanka