Параметры отслеживания загрузчика класса JVM в JNLP

89
8

Я пытаюсь отладить проблему загрузки классов в java файле, который выполняется через JNLP. Но -XX:+TraceClassLoading только печатает события "Loaded" и только для основных классов. Другой вариант -verbose:class ничего не делает. Я попытался префикс D и X без эффекта.


Когда я использую -verbose:class в приложении java для рабочего стола, он отлично отображает все события, но ошибка здесь не встречается.


Я что-то упустил или есть другой способ отслеживать загрузку классов в JNLP?


Edit:

Примеры того, что я пытался (это то, что вызывает вызов javaws):


/usr/lib/jvm/jdk1.8.0_161/jre/bin/java -classpath /usr/lib/jvm/jdk1.8.0_161/jre/lib/deploy.jar -Djava.security.policy=file:/usr/lib/jvm/jdk1.8.0_161/jre/lib/security/javaws.policy -DtrustProxy=true -verbose:class -XX:+TraceClassLoading -Xverify:remote -Djnlpx.home=/usr/lib/jvm/jdk1.8.0_161/jre/bin -Djava.security.manager -Djnlpx.origFilenameArg=http://localhost:8080/webstart.jnlp -Djnlpx.remove=false -Dsun.awt.warmup=true -Xbootclasspath/a:/usr/lib/jvm/jdk1.8.0_161/jre/lib/javaws.jar:/usr/lib/jvm/jdk1.8.0_161/jre/lib/deploy.jar:/usr/lib/jvm/jdk1.8.0_161/jre/lib/plugin.jar -Djnlpx.splashport=59367 -Djnlpx.jvm=/usr/lib/jvm/jdk1.8.0_161/jre/bin/java com.sun.javaws.Main -notWebJava http://localhost:8080/webstart.jnlp

Частичный вывод из запуска JNLP (без пользовательских классов):


[Loaded java.lang.UNIXProcess$$Lambda$15/1173574345 from java.lang.UNIXProcess]
[Loaded com.sun.javaws.Launcher$CacheUpdateRequiredException from /usr/lib/jvm/jdk1.8.0_161/jre/lib/javaws.jar]
[Loaded java.lang.SecurityException from /usr/lib/jvm/jdk1.8.0_161/jre/lib/rt.jar]
[Loaded com.sun.deploy.security.BlockedException from /usr/lib/jvm/jdk1.8.0_161/jre/lib/deploy.jar]
[Loaded sun.awt.X11.XSystemTrayPeer from /usr/lib/jvm/jdk1.8.0_161/jre/lib/rt.jar]

Частичный вывод из рабочего стола java run (обратите внимание на классы пользователей из репозитория .m2 и да, он был запущен на _151, но нет разницы, я пробовал оба):


[Loaded <...>.UnmodifiableArrayIterator from file:/home/imaskar/.m2/repository/<...>/1.6-SNAPSHOT/<...>-1.6-SNAPSHOT-jar-with-dependencies.jar]
[Loaded <...>.RCEvent from file:/home/imaskar/.m2/repository/<...>/1.6-SNAPSHOT/<...>-1.6-SNAPSHOT-jar-with-dependencies.jar]
[Loaded <...>.RCMessengerQualityListener$1 from file:/home/imaskar/.m2/repository/<...>/1.6-SNAPSHOT/<...>-1.6-SNAPSHOT.jar]
[Loaded javax.swing.JComponent$$Lambda$124/1794174740 from javax.swing.JComponent]
[Loaded java.util.prefs.FileSystemPreferences$10 from /usr/lib/jvm/jdk1.8.0_151/jre/lib/rt.jar]
[Loaded java.util.prefs.FileSystemPreferences$12 from /usr/lib/jvm/jdk1.8.0_151/jre/lib/rt.jar]
[Loaded java.util.prefs.FileSystemPreferences$11 from /usr/lib/jvm/jdk1.8.0_151/jre/lib/rt.jar]

Edit2:


Здесь предлагается другой метод передачи параметров jnlp, но он также печатает только основные классы. Полагаю, это происходит потому, что опции передаются только первому java-вызову, который управляет только развертыванием, а затем делает другой вызов фактическому приложению.

спросил(а) 2021-01-19T17:43:36+03:00 6 месяцев, 1 неделя назад
1
Решение
77

Я нашел обходной путь , но все еще заинтересован в нормальном способе сделать это.


Обход


    запустите javaws http://localhost:8080/webstart.jnlp и подождите немного, чтобы он разворачивался и запускал
    запустите ps -ax | grep Djnlpx и скопируйте полностью расширенный вызов JNLP
    закрыть приложение из p1
    добавьте -verbose:class (или любой другой параметр, который вы хотите) к вызову из p2 и снова запустите.

Описание


Я обнаружил, что вызов javaws расширяется дважды. Итак, основной вызов


javaws http://localhost:8080/sin-web/webstart.jnlp

Если я попытаюсь добавить какие-либо параметры здесь, ничего не работает.
Он расширяется в


/usr/lib/jvm/jdk1.8.0_151/jre/bin/java
-classpath
/usr/lib/jvm/jdk1.8.0_151/jre/lib/deploy.jar
-Djava.security.policy=file:/usr/lib/jvm/jdk1.8.0_151/jre/lib/security/javaws.policy
-DtrustProxy=true
-Xverify:remote
-Djnlpx.home=/usr/lib/jvm/jdk1.8.0_151/jre/bin
-Djava.security.manager
-Djnlpx.origFilenameArg=http://localhost:8080/sin-web/webstart.jnlp
-Djnlpx.remove=false
-Dsun.awt.warmup=true
-Xbootclasspath/a:/usr/lib/jvm/jdk1.8.0_151/jre/lib/javaws.jar:/usr/lib/jvm/jdk1.8.0_151/jre/lib/deploy.jar:/usr/lib/jvm/jdk1.8.0_151/jre/lib/plugin.jar
-Djnlpx.splashport=44975
-Djnlpx.jvm=/usr/lib/jvm/jdk1.8.0_151/jre/bin/java
com.sun.javaws.Main
-verbose
-notWebJava
http://localhost:8080/sin-web/webstart.jnlp

Разрывы строк для удобства чтения, вы должны удалить их. Если вы поместите -verbose:class здесь, он печатает только основные классы. И этот вызов расширяется:


/usr/lib/jvm/jdk1.8.0_161/jre/bin/java 
-Xmx1g -Xms256m
-Djnlp.packEnabled=false
-Xbootclasspath/a:/usr/lib/jvm/jdk1.8.0_161/jre/lib/javaws.jar:/usr/lib/jvm/jdk1.8.0_161/jre/lib/deploy.jar:/usr/lib/jvm/jdk1.8.0_161/jre/lib/plugin.jar
-Djnlp.tk=awt
-classpath /usr/lib/jvm/jdk1.8.0_161/jre/lib/deploy.jar -Djnlpx.vmargs=LVhteDFnAC1YbXMyNTZtAC1Eam5scC5wYWNrRW5hYmxlZD1mYWxzZQA= -Djnlpx.jvm=/usr/lib/jvm/jdk1.8.0_161/jre/bin/java
-Djnlpx.splashport=59367
-Djnlpx.home=/usr/lib/jvm/jdk1.8.0_161/jre/bin
-Djnlpx.remove=false
-Djnlpx.offline=false
-Djnlpx.relaunch=true
-Djnlpx.session.data=/tmp/session2497443162302588696
-Djnlpx.heapsize=NULL,NULL
-Djava.security.policy=file:/usr/lib/jvm/jdk1.8.0_161/jre/lib/security/javaws.policy
-DtrustProxy=true
-Xverify:remote
-Djnlpx.origFilenameArg=http://localhost:8080/webstart.jnlp
-Dsun.awt.warmup=true
-Djava.security.manager
com.sun.javaws.Main
-notWebJava
/home/imaskar/.java/deployment/cache/6.0/1/40a358c1-677ef294

Разрыв строки для readablility снова. Если вы поместите -verbose:class здесь, все события классов будут напечатаны.

ответил(а) 2021-01-19T17:43:36+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема