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

Resin 報 ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory:缺少 commons-io 依賴

     編輯:程式設計綜合問答

錯誤堆疊

java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
at com.caucho.loader.DynamicClassLoader.loadClass...
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

根因

commons-fileupload 依賴 commons-io**,但項目中**只有 fileupload 沒有 io**。

  • FileItemFactory 接口在 fileupload 包中。
  • 其默認實現 DiskFileItemFactory 內部使用 DeferredFileOutputStream(屬於 commons-io)。
  • Resin 類加載器嘗試加載 FileItemFactory 時,觸發靜態初始化/方法簽名解析,進而需要 DeferredFileOutputStream 類,**找不到拋 NoClassDefFoundError**,包裝為 ClassNotFoundException。

解決方案

  1. 添加 commons-io 依賴(Maven/Gradle/手動放 JAR):
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>  <!-- 或與 fileupload 兼容的版本 -->
</dependency>
  1. 手動放 JAR:下載 commons-io-2.x.jar 放入 WEB-INF/lib/。

版本兼容性提示

commons-fileupload建議 commons-io
1.3.x2.4 - 2.6
1.42.5 - 2.11

驗證

# 檢查 WEB-INF/lib
ls WEB-INF/lib/ | grep commons
# 應見到:
# commons-fileupload-1.4.jar
# commons-io-2.11.0.jar

總結

Resin 報 FileItemFactory ClassNotFound,**實為缺少傳遞依賴 commons-io**。添加對應版本 commons-io.jar 到 WEB-INF/lib 或構建依賴即可解決。Maven/Gradle 會自動傳遞,手動管理 JAR 時易漏。

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