訪問 Struts2 Action 時拋出 java.lang.NoSuchMethodError: org.apache.struts2.dispatcher.FilterDispatcher.getDevModeOverride()Ljava/lang/Boolean,堆棧顯示發生在 DebuggingInterceptor。這是典型的 Jar 包版本衝突 或 類加載順序問題。
struts2-core 或 struts2-dispatcher Jar(如 2.3.x 與 2.5.x 混用)。common/lib、shared/lib)加載了舊版本 Struts 類,優先於 WebApp 自帶的新版本。struts2-core-*.jar、struts2-dispatcher-*.jar。mvn dependency:tree | grep struts,排除衝突傳遞依賴:
<exclusions>
<exclusion>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-dispatcher</artifactId>
</exclusion>
</exclusions>
work/Catalina/localhost/<app>、temp 目錄,重新部署。執行「重新部署 Tomcat」後問題解決,說明是編譯緩存或熱部署導致舊類殘留。生產環境建議:
mvn clean package 完整構建 WAR。webapps/<app> 及 work、temp,再啟動部署。FilterDispatcher。FilterDispatcher,改用 StrutsPrepareAndExecuteFilter,web.xml 必須同步更新。遇到 NoSuchMethodError/NoClassDefFoundError 90% 是 Jar 衝突或類加載器問題,清理緩存、統一版本、檢查依賴樹是標準解決流程。