異常堆疊核心信息
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/Converter
...
Caused by: java.lang.ClassNotFoundException: org.apache.commons.beanutils.Converter
直接原因
項目依賴 **Apache Commons BeanUtils** 庫,但該 JAR 包**未部署到 Tomcat 運行時類路徑** (即 `WEB-INF/lib` 目錄)。
解決步驟
- Maven 項目:在 `pom.xml` 添加依賴 (確保 `scope` 為 `compile` 或默認):
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version> <!-- 或兼容版本 -->
</dependency>
執行 `mvn clean package` 重新構建 WAR,確認 `target/項目名/WEB-INF/lib/commons-beanutils-1.9.4.jar` 存在。
- 手動管理 JAR 的項目:
- 下載 `commons-beanutils-x.x.jar` 及其傳遞依賴 `commons-logging.jar`、`commons-collections.jar`。
- 複製到項目 `WebContent/WEB-INF/lib/` (或 `src/main/webapp/WEB-INF/lib/`) 目錄下。
- 在 Eclipse 中:右鍵項目 → Properties → Deployment Assembly → Add → Java Build Path Entries → 選中該 JAR → Finish,確保部署到 `WEB-INF/lib`。
- Tomcat 共享庫 (不推薦):將 JAR 放入 `$CATALINA_HOME/lib`,但會污染全局類加載器,易發生版本衝突。
驗證方法
- 啟動 Tomcat,查看控制台無 `ClassNotFoundException`。
- 在 Servlet 中測試:`BeanUtils.copyProperties(dest, src);` 應正常執行。
避坑指南
- Eclipse 「Run As → Run on Server」有時不自動同步 `WEB-INF/lib`,嘗試:Project → Clean → 清理 Tomcat 工作目錄 → 重新發布。
- 若使用 `commons-beanutils` 1.9.0+ 需 JDK 8+,舊環境請降級至 1.8.3。
- 檢查是否有多個版本 BeanUtils JAR 衝突 (如 `commons-beanutils-core` 同時存在)。
總結
缺失 `commons-beanutils` JAR 導致類加載失敗,核心解決是**確保 JAR 進入 `WEB-INF/lib` 並隨 WAR 部署**。Maven 管理最省心,手動管理需檢查 Deployment Assembly。