Как я могу отлаживать приложения с помощью Java Web Start (JNLP)?
-
22-08-2019 - |
Вопрос
Я знаю, как отладить удаленную виртуальную машину 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
Вам нужно будет сделать следующее:
Включите журналы Java и трассировку в Панели управления Java > Дополнительно.
Включите параметры для отладки 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 из браузера:Журналы и трассировки находятся в папке
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.