在Spring 4 MVC上传文件java.lang.NoClassDefFoundError:org / apache / commons / fileupload / FileItemFactory

时间:2015-05-08 20:42:57

标签: spring maven spring-mvc file-upload

我尝试在Spring 4 MVC中编写文件上传程序。但是不断抛出以下异常。

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory

我回顾了与此问题相关的所有问题,并声称我没有犯过任何错误。

我从maven下载了 commons-fileupload:1.3.1 库,并将以下行添加到我的.iml文件中

<orderEntry type="library" name="commons-fileupload:commons-fileupload:1.3.1" level="project" />

将此bean添加到spring-mvc-servlet.xml

<bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- setting maximum upload size -->
    <property name="maxUploadSize" value="100000" />

</bean>

此外,我注意到库中无法找到的类被划掉(见下图)classes are cut out

无法确定这是否是异常的主要原因,或者这些类仍然可用。

3 个答案:

答案 0 :(得分:0)

  

java.lang.NoClassDefFoundError:   组织/阿帕奇/公地/文件上传/ FileItemFactory

NoClassDefFoundError异常表示发现了FileItemFactory类但在创建实例时抛出了异常,当类路径或版本不匹配时重复的依赖jar文件时会发生此类问题。

答案 1 :(得分:0)

我遇到了同样的问题并且解决了它。 1)确保将commons-fileupload和commons-io列为依赖项。 2)确保没有其他依赖项覆盖该功能。例如,Spring默认使用Servlet-api 3上传机制......从项目模块依赖项中删除

3)最后一点是我的关键解决方案,确保将两个依赖项添加到tomcat部署中。我无法发布屏幕截图,所以我会给你一条双重检查罐子是否存在的路径。 在Itellij Idea项目结构中 - &gt;文物 - &gt;将可用元素与输出布局进行比较。

希望这会有所帮助。

答案 2 :(得分:0)

我有同样的问题,在我的情况下,我发现公共 - 依赖是冲突的,在解决之后,一切都很好!

为了发现冲突,我跑了:

mvn dependency:tree -Dverbose -Dincludes=commons-io

结果是:

[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ smartplan ---
[INFO] com.claro:smartplan:war:1.15.0
[INFO] +- commons-fileupload:commons-fileupload:jar:1.3.1:compile
[INFO] |  \- commons-io:commons-io:jar:2.2:compile
[INFO] \- org.hibernate:hibernate-search-orm:jar:4.5.1.Final:test
[INFO]    \- org.hibernate:hibernate-search-analyzers:jar:4.5.1.Final:test
[INFO]       \- org.apache.solr:solr-analysis-extras:jar:3.6.2:test
[INFO]          \- org.apache.solr:solr-core:jar:3.6.2:test
[INFO]             +- org.apache.solr:solr-solrj:jar:3.6.2:test
[INFO]             |  \- (commons-io:commons-io:jar:2.1:test - omitted for conflict with 2.2)
[INFO]             \- (commons-io:commons-io:jar:2.1:test - omitted for conflict with 2.2)
[INFO] ------------------------------------------------------------------------

之后,我删除了对pom.xml的冲突依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-orm</artifactId>
    <version>4.5.1.Final</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </exclusion>
    </exclusions>
</dependency>