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的類加載情況,進一步定位問題。