Как я могу отлаживать приложения с помощью Java Web Start (JNLP)?

StackOverflow https://stackoverflow.com/questions/686061

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

Запустите виртуальную машину 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

Что касается более новых версий 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.

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

Пример:

javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp

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

  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 каталог из Главная страница развертывания Java откуда я вставляю эти места:

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

    б.Windows 7/Виста: %APPDATA%\..\LocalLow\Sun\Java\Deployment

    в.Линукс/Солярис: %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:

В 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

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

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

Чтобы отладить приложение 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, выберите «Использовать другое» в действии и выберите сценарий в диалоговом окне «Выбор вспомогательного приложения».В Chrome вам необходимо изменить настройки системы Linux.В KDE перейдите в «Настройки системы» → «Ассоциации файлов, известные типы»:application:x-java-jnlp-file, добавьте новое приложение, выберите ~/bin/javaws-debug.sh в диалоговом окне «Выберите приложение для application/x-java-jnlp-file».

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top