Как я могу отлаживать приложения в Java Web Start (JNLP)?
Я знаю, как я могу отлаживать удаленную виртуальную виртуальную машину Java с помощью Eclipse, но как это сделать с помощью программы Java Web Start. У меня проблема, которая возникает только в Java Web Start. Это должно быть связано с безопасностью.
Мне нужно решение, которое будет работать с текущей виртуальной машиной Java, например 1.6.0_12.
Ответы
Ответ 1
Это точно так же, как и с любым другим Java-процессом, который вы хотите удаленно отлаживать: вам нужно установить некоторые аргументы для виртуальной машины (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345
) и затем подключиться к данному порту. В Java Webstart 6.0 это можно сделать с помощью опции -J, в более ранней версии через переменную среды JAVAWS_VM_ARGS. Подробнее здесь.
Ответ 2
Запустите JWS VM вручную. Таким образом вы можете предоставить параметры запуска, чтобы открыть порт отладки. Вот описание , оно выглядит следующим образом:
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
Ответ 3
Что касается более новых версий 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.
Ответ 4
Вы также можете указать параметр debug для исполняемого файла javaws с использованием опции -J
Пример:
javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
Ответ 5
Вам нужно будет сделать следующее:
-
Включить журналы и трассировку Java в панели управления Java > Дополнительно.
![Панель управления Java: журналы и трассировка]()
-
Включить параметры для отладки Java (необязательные, но полезные, то есть проблемы с tls/ssl handshake как 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 > View (этого не требуется в этом конкретном) и запустите JNLP файл из браузера:
![Панель управления Java: аргументы jvm]()
-
Журналы и трассы расположены в каталоге log
из Java Deployment Home, откуда я вставляю эти места:
а. Windows XP: %HOME%\Application Data\Sun\Java\Deployment
б. Windows 7/Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment
с. Linux/Solaris: %HOME%/.java/deployment
С javax.net.debug = все вы увидите рукопожатие, если 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:
Ответ 6
Чтобы отладить приложение Web Start в Linux, создайте оболочку script ~/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 "[email protected]"
Затем в вашем браузере выберите script как приложение для вызова в файлах jnlp.
Например, в Firefox перейдите в "Редактировать" → "Настройки" → "Приложения", "Тип контента: Java Web Start" и выберите "Использовать другое" в действии и выберите script в диалоговом окне "Выбор вспомогательного приложения". В Chrome вам нужно изменить настройки системы Linux. В KDE перейдите в раздел "Системные настройки" → "Ассоциации файлов", "Известные типы": приложение: x-java-jnlp файл, добавьте новое приложение, выберите ~/bin/javaws-debug.sh из "Выберите приложение для приложения /x -java -jnlp-file".
После настройки вашего браузера приложение Java Web Start начнет использовать вашу оболочку, что позволит отладчику подключиться к порту 8989.
Ответ 7
С помощью 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
Ответ 8
Пробовали ли вы печатать журнал отладки? Это полезная вещь, которая должна быть во всяком случае, и может помочь в этом случае.
Если вам нужна настоящая отладка, см., например, Вот:
Как отлаживать в WebStart?
Ответ 9
Вы можете запустить JNLP с включенной отладкой:
javaws -Xnosplash -J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5009 <application>.jnlp
Выход:
Прослушивание транспорта dt_socket по адресу: 5009
Прикрепите к этому с вашей любимой IDE, я использую IntelliJ IDEA
Выполнить> Присоединить к процессу