ClassNotFoundException: weka.classifiers.Classifier:缺少依賴 JAR 排查Caused by: java.lang.ClassNotFoundException: weka.classifiers.Classifier
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
WAR 包內**缺少 weka.jar**(或包含 weka.classifiers.Classifier 的 JAR),導致 WebappClassLoader 無法載入該類別。應用啟動階段(ServletContextListener、Servlet init、Spring 掃描)嘗試實例化依賴 Weka 的 Bean 時失敗。
# Linux/Mac
unzip -l your.war | grep weka
# 或
jar tf your.war | grep weka
# Windows:將 .war 改為 .zip,用解壓軟體查看 WEB-INF/lib/ 目錄
<!-- 錯誤:provided 不會打包進 WAR -->
<dependency>
<groupId>nz.ac.waikato.cms.weka</groupId>
<artifactId>weka-stable</artifactId>
<version>3.8.6</version>
<scope>provided</scope> <-- 刪除或改為 compile/runtime
</dependency>
<!-- 正確:compile (預設) 或 runtime -->
<dependency>
<groupId>nz.ac.waikato.cms.weka</groupId>
<artifactId>weka-stable</artifactId>
<version>3.8.6</version>
</dependency>
maven-war-plugin 配置: 是否排除了 WEB-INF/lib/*.jar?是否設定 packagingExcludes?<scope>compile</scope>)。pom.xml 加入 Weka 依賴(compile 範圍),重新 mvn clean package。dependency:tree 分析,統一版本或用 <exclusion> 排除舊版。weka-core,或改用輕量替代庫(Smile, Tribuo)。# 部署後查看 Tomcat 日誌
tail -f $CATALINA_HOME/logs/catalina.out
# 應不再出現 ClassNotFoundException,改為正常啟動訊息
總結: ClassNotFoundException 即「類別不在 CLASSPATH」。WAR 部署時 CLASSPATH = WEB-INF/classes + WEB-INF/lib/*.jar。解壓 WAR 檢查 lib/ 目錄,缺什麼補什麼,通常是 Maven scope 設錯或打包配置排除了該 JAR。