我尝试在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>
此外,我注意到库中无法找到的类被划掉(见下图)
无法确定这是否是异常的主要原因,或者这些类仍然可用。
答案 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>