Tomcat 10启动报错找不到java/util/logging/Logger,求排查解决方法
问题描述
- Win10系统中JDK17安装路径为
D:\Program Files\Java\jdk-17.0.2,版本验证正常:
C:\Users\xxx>javac -version javac 17.0.2
- Tomcat10压缩包解压至
E:\wsl\apache-tomcat-10.0.22,配置的环境变量如下:
set|findstr CATA CATALINA_HOME=E:\wsl\apache-tomcat-10.0.22 echo %JRE_HOME% D:\Program Files\Java\jdk-17.0.2\jre echo %PATH% ....;E:\wsl\apache-tomcat-10.0.22\bin;E:\wsl\apache-tomcat-10.0.22\lib; CLASS_PATH=D:\Program Files\Java\jdk-17.0.2\lib\dt.jar;D:\Program Files\Java\jdk-17.0.2\lib\tools.jar;%JRE_HOME%\lib
- 运行
startup或catalina run时出现错误日志:
catalina run Using CATALINA_BASE: "E:\wsl\apache-tomcat-10.0.22" Using CATALINA_HOME: "E:\wsl\apache-tomcat-10.0.22" Using CATALINA_TMPDIR: "E:\wsl\apache-tomcat-10.0.22\temp" Using JRE_HOME: "D:\Program Files\Java\jdk-17.0.2\jre" Using CLASSPATH: "E:\wsl\apache-tomcat-10.0.22\bin\bootstrap.jar;E:\wsl\apache-tomcat-10.0.22\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED WARNING: Unknown module: java.rmi specified to --add-opens Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:181) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:133) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:156) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:211) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50) Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
- 访问
localhost:8080无响应,需排查错误原因及配置遗漏点。
问题分析与解决建议
错误说明
java.lang.NoClassDefFoundError: java/util/logging/Logger:该类属于Java标准核心库,JVM无法加载它说明JRE环境配置异常,或JDK/JRE完整性存在问题。WARNING: Unknown module: java.rmi specified to --add-opens:Java 17已移除java.rmi模块,该参数为无效配置,会触发警告,但不是核心报错原因。
配置问题与修复步骤
JRE_HOME配置错误
JDK 17开始不再单独提供独立的JRE目录,你配置的D:\Program Files\Java\jdk-17.0.2\jre大概率不存在或不完整。Tomcat 10可直接使用JDK自带的JRE环境,建议:- 将JRE_HOME修改为JDK根目录
D:\Program Files\Java\jdk-17.0.2; - 或直接删除JRE_HOME环境变量,Tomcat会自动从JAVA_HOME识别JDK。
- 将JRE_HOME修改为JDK根目录
CLASS_PATH配置冗余且干扰启动
Java 9+采用模块化系统,传统CLASS_PATH配置已无必要,Tomcat启动时会自行管理类路径。手动配置的CLASS_PATH可能覆盖默认配置,导致标准库类加载异常,直接删除系统环境变量中的CLASS_PATH即可。移除无效的JDK_JAVA_OPTIONS参数
找到系统环境变量中的JDK_JAVA_OPTIONS,删除--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED这一项,避免无效参数干扰启动。验证JDK完整性
重启cmd窗口,执行java -version和javac -version确认输出正常,若异常则重新安装JDK 17。
完成以上操作后,重新执行catalina run,检查启动日志是否正常,再尝试访问localhost:8080。
内容的提问来源于stack exchange,提问作者gongliming7
相关产品推荐
相关产品推荐

