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)。FileItemFactory 時,觸發靜態初始化/方法簽名解析,進而需要 DeferredFileOutputStream 類,**找不到拋 NoClassDefFoundError**,包裝為 ClassNotFoundException。<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version> <!-- 或與 fileupload 兼容的版本 -->
</dependency>
commons-io-2.x.jar 放入 WEB-INF/lib/。| commons-fileupload | 建議 commons-io |
|---|---|
| 1.3.x | 2.4 - 2.6 |
| 1.4 | 2.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 時易漏。