Как я могу отлаживать приложения в Java Web Start (JNLP)? - PullRequest
47 голосов
/ 26 марта 2009

Я знаю, как я могу отлаживать удаленную виртуальную машину Java с помощью Eclipse, но как я могу это сделать с помощью программы Java Web Start. У меня проблема, которая возникает только в Java Web Start. Это должно быть связано с безопасностью.

Мне нужно решение, которое будет работать с текущей виртуальной машиной Java, такой как 1.6.0_12.

Ответы [ 8 ]

24 голосов
/ 26 марта 2009

Это то же самое, что и с любым другим Java-процессом, который вы хотите удаленно отлаживать: вы должны установить некоторые аргументы для виртуальной машины (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345 ) и затем подключиться к данному порту. В Java Webstart 6.0 это можно сделать с помощью параметра -J, в более ранней версии - через переменную окружения JAVAWS_VM_ARGS. Подробнее здесь .

23 голосов
/ 26 марта 2009

Запустите виртуальную машину JWS вручную. Таким образом, вы можете указать параметры запуска для открытия порта отладки. Вот описание , оно выглядит так:

set JAVAWS_TRACE_NATIVE=1
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws http://server:port/descriptor.jnlp
15 голосов
/ 06 ноября 2014

Что касается более новых версий Java (Java 8u20 + и Java 7u70 +), я обнаружил, что такие параметры, как -Xrunjdwp, нельзя передать напрямую или с помощью JAVAWS_VM_ARGS. Сообщение Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 начал отображаться в выводе консоли.

Единственное решение, которое мне помогло, - передать эти аргументы в системную переменную JAVA_TOOL_OPTIONS.

9 голосов
/ 21 мая 2013

Вы также можете предоставить параметр отладки исполняемому файлу javaws, используя опцию -J

Пример:

javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
4 голосов
/ 07 августа 2017

Вам нужно будет сделать следующее:

  1. Включите журналы Java и трассировку в Панели управления Java> Дополнительно. Java Control Panel: logs and tracing

  2. Включить параметры для отладки Java (необязательно, но полезно, то есть проблемы с рукопожатием tls / ssl как close_notify или handshake_failure) и запуска JNLP, есть два способа сделать это:

    2.а. Загрузите файл JNLP и выполните его из командной строки (в данном конкретном случае команда SET не требуется).

    set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all
    javaws -wait jnlp.jnlp
    

    2б. Добавьте аргументы (т.е. -Djavax.net.debug=all) для JVM в Панель управления Java> Java> Вид (в данном случае это не требуется) и запустите файл JNLP из браузера:

    Java Control Panel: jvm arguments

  3. Журналы и трассировки находятся в каталоге log из Home Deployment Java , куда я вставляю эти места:

    а. Windows XP: %HOME%\Application Data\Sun\Java\Deployment

    б. Windows 7 / Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment

    с. Linux / Solaris: %HOME%/.java/deployment

С javax.net.debug = all вы увидите рукопожатие, если jar внутри jnlp загружен из соединения https. Проблемы такого рода трудно отлаживать.

...
%% No cached client session
*** ClientHello, TLSv1.2
...
***
... 
Java Web Start Main Thread, received EOFException: error
Java Web Start Main Thread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Java Web Start Main Thread, SEND TLSv1.2 ALERT:  fatal, description = handshake_failure
Java Web Start Main Thread, WRITE: TLSv1.2 Alert, length = 2
Java Web Start Main Thread, called closeSocket()
#### Java Web Start Error:
2 голосов
/ 12 июля 2017

В Java 8 и Windows 10 откройте командную строку (cmd.exe) и введите:

set JAVAWS_TRACE_NATIVE=1
set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
javaws java-app.jnlp
1 голос
/ 14 июня 2013

Для отладки приложения Web Start в Linux создайте сценарий оболочки ~ / bin / javaws-debug.sh с вызовом javaws в режиме отладки, как описано выше:

~ / bin / javaws-debug.sh:

#!/bin/sh
export JAVAWS_TRACE_NATIVE=1
export JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE 
  -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws "$@"

Затем в вашем браузере выберите этот скрипт в качестве приложения для вызова в файлах jnlp.

Например, в Firefox перейдите в «Правка» → «Настройки» → «Приложения», «Тип содержимого»: Java Web Start, выберите «Использовать другое» в действии и выберите сценарий в диалоговом окне «Выбор вспомогательного приложения». В Chrome вам нужно изменить системные настройки Linux. В KDE перейдите в «Настройки системы» → «Связи файлов, известные типы»: application: x-java-jnlp-file, добавьте новое приложение, выберите ~ / bin / javaws-debug.sh в «Выберите приложение для приложения / x-java». -jnlp-file "диалог.

Как только ваш браузер настроен, приложение Java Web Start начнет использовать вашу оболочку, что позволит отладчику подключаться через порт 8989.

1 голос
/ 26 марта 2009

Вы пытались распечатать журнал отладки? Во всяком случае, это полезно, и в этом случае может помочь.

Если вы хотите настоящую отладку, см., Например, Вот: Как я могу отлаживать в WebStart?

...