开源项目
1 前言
一个问题,一篇文章,一出故事。
笔者今天使用HP服务器的iLO的Java IRC进行远程连接时候日志遇到如下错误,
[ITW-CORE][2026-09-17 10:42:50.412 CST][ERROR][net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader]
Error while activating jars
java.lang.RuntimeException: java.lang.IllegalAccessException: class net.adoptopenjdk.icedteaweb.jdk89access.JarIndexAccess cannot access class jdk.internal.util.jar.JarIndex (in module java.base) because module java.base does not expor
t jdk.internal.util.jar to unnamed module @7d70d1b1
at net.adoptopenjdk.icedteaweb.jdk89access.JarIndexAccess.getJarIndex(JarIndexAccess.java:55)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.doActivateJars(JNLPClassLoader.java:1279)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.lambda$activateJars$3(JNLPClassLoader.java:1179)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.activateJars(JNLPClassLoader.java:1180)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.initializeResources(JNLPClassLoader.java:830)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.(JNLPClassLoader.java:352)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.createInstance(JNLPClassLoader.java:425)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.getInstance(JNLPClassLoader.java:497)
at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.getInstance(JNLPClassLoader.java:470)
at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:534)
at net.sourceforge.jnlp.Launcher.launchApplet(Launcher.java:489)
at net.sourceforge.jnlp.Launcher.access$400(Launcher.java:72)
at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:665)
Caused by: java.lang.IllegalAccessException: class net.adoptopenjdk.icedteaweb.jdk89access.JarIndexAccess cannot access class jdk.internal.util.jar.JarIndex (in module java.base) because module java.base does not export jdk.internal.ut
il.jar to unnamed module @7d70d1b1
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591)
at java.base/java.lang.reflect.Method.invoke(Method.java:558)
at net.adoptopenjdk.icedteaweb.jdk89access.JarIndexAccess.getJarIndexImpl(JarIndexAccess.java:61)
at net.adoptopenjdk.icedteaweb.jdk89access.JarIndexAccess.getJarIndex(JarIndexAccess.java:53)
... 13 more
2 最佳实践
2.1 环境配置
2.2 设置合适的jre版本
2.2.1 安装合适的jre版本
sudo apt install -y openjdk-8-jre
2.2.2 导入安装的jre版本

如上图所示:
单击打开“OpenWebStart Settings”
然后选择【JVM Manager】
单击【Find local】即可自动发现新安装的jre
单击“17.0.20 Ubuntu”旁边的【…】然后单击【Deactivate JVM】
单击【Apply】完成即可完成。
设置完成后,你可以使用如下命令确认配置,
cat ~/.cache/icedtea-web/jvm-cache/cache.json
可见如下配置,
{
"runtimes": [
{
"version": "17.0.20",
"vendor": "Ubuntu",
"javaHome": "file:///usr/lib/jvm/java-17-openjdk-amd64/",
"active": false,
"os": "LINUX64",
"managed": false,
"lastUsage": "2026-09-17T16:38:23.536935"
},
{
"version": "1.8.0_502",
"vendor": "Private Build",
"javaHome": "file:///usr/lib/jvm/java-8-openjdk-amd64/",
"active": true,
"os": "LINUX64",
"managed": false,
"lastUsage": "2026-09-17T16:38:23.567063"
},
{
"version": "1.8.0_502",
"vendor": "Private Build",
"javaHome": "file:///usr/lib/jvm/java-8-openjdk-amd64/jre/",
"active": true,
"os": "LINUX64",
"managed": false,
"lastUsage": "2026-09-17T16:38:23.59099"
}
]
}
2.2.3 强制指定jre版本
vim ~/.config/icedtea-web/deployment.properties
加入如下配置,
ows.jvm.manager.searchLocalAtStartup=true ows.jvm.manager.versionRange=1.8 ows.jvm.manager.vendor=* ows.jvm.manager.server.allowFromJnlp=false ows.jvm.manager.vendor.allowFromJnlp=false
没有评论