首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Tomcat 運行 Servlet 報 NoClassDefFoundError: org/apache/commons/beanutils/Converter 解決方案

     編輯:程式設計疑難解答

異常堆疊核心信息


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` 目錄)。

解決步驟

  1. 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` 存在。

  1. 手動管理 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`。
  1. 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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved