Tomcat日志中类加载失败的常见表现形式及含义:
编辑Tomcat的conf/logging.properties文件,添加或修改以下配置,开启Web应用类加载器的详细日志:
org.apache.catalina.loader.WebappClassLoader.level = FINE
org.apache.catalina.loader.WebappClassLoader.delegate = true
重启Tomcat后,日志会输出类加载的详细过程(如从哪个路径加载类),帮助快速定位问题。
Tomcat采用分层类加载器,不同层级的加载器负责不同的路径:
java.lang.*)。$JAVA_HOME/jre/lib/ext)和类路径中的类。$CATALINA_HOME/lib中的类(如Tomcat自身依赖的JAR包)。WEB-INF/classes(应用自身类)和WEB-INF/lib(应用依赖的JAR包)。WEB-INF/classes目录缺失、WEB-INF/lib中缺少依赖JAR包)。WEB-INF/classes目录下(如com/example/MyClass.class)。WEB-INF/lib目录是否包含所有必要的JAR包(如第三方库、框架依赖)。$CATALINA_HOME/lib目录下。WEB-INF/lib中的JAR包是否完整(如Maven/Gradle构建的项目,确认package或install时依赖已正确打包)。mvn dependency:tree(Maven)或gradle dependencies(Gradle)查看依赖树,排除重复或冲突的版本(如两个不同版本的Spring Core库)。$CATALINA_HOME/lib中放置应用特有的JAR包(如数据库驱动、框架核心库),应将其放入WEB-INF/lib。conf/context.xml中配置<Loader delegate="true"/>),但需谨慎使用。WEB-INF/classes和WEB-INF/lib目录有读取权限(Linux下可通过chmod -R 755设置)。jstack或jvisualvm工具查看JVM的类加载情况,进一步定位问题。