The question, of course, is a hackneyed one, but none of the solutions found helped me.

I am writing an application on spring mvc . When you run on ide from ide, everything is fine.

With a maven, I collect the war file, deploy it on a separate running volume. All the basic functionality works, but when I try to upload a file to the server, I get java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream in response java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream .

Dependence in pom is specified. The library itself with the required file in the cooker is. All libraries except this one sees. If the problem is in the classpath , then why are all other libraries normally pulling up?

8 tomakat with standard libs. Run without any parameters, the usual startup.bat.

pom.xml

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ru.sidorov</groupId> <artifactId>findparty</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>findparty</name> <properties> <java.version>1.6</java.version> <spring.version>4.2.4.RELEASE</spring.version> <cglib.version>2.2.2</cglib.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Spring core & mvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>4.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>4.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.social</groupId> <artifactId>spring-social-web</artifactId> <version>1.1.0.BUILD-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.social</groupId> <artifactId>spring-social-core</artifactId> <version>1.1.0.BUILD-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.social</groupId> <artifactId>spring-social-vkontakte</artifactId> <version>1.1.0.BUILD-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>4.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>4.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.0.1.RELEASE</version> </dependency> <!-- Servlet Spec --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.0.6.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-orm</artifactId> <version>5.5.2.Final</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.7</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.7</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4-1203-jdbc42</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-api</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-request-api</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-core</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-request-jsp</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-request-servlet</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-template</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-autotag-core-runtime</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.4.3</version> </dependency> <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <repositories> <repository> <id>springsource-milestones</id> <name>SpringSource Milestones Proxy</name> <url>https://oss.sonatype.org/content/repositories/springsource-milestones</url> </repository> </repositories> 

Controller package ru.sidorov.controller;

 import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import ru.sidorov.model.Entity.UserEntity; import ru.sidorov.model.UserData; import ru.sidorov.service.UserService; import javax.servlet.http.HttpServletRequest; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; @Controller @SessionAttributes("userData") public class FileUploadController { @Value("${avatars.path}") private String avatarsPath; @Value("${defaultAvatar}") private String defaultAvatar; @RequestMapping(value="/upload", method= RequestMethod.GET) public @ResponseBody String provideUploadInfo() { return "Вы можете загружать файл с использованием того же URL."; } @RequestMapping(value="/upload", method= RequestMethod.POST) public @ResponseBody String handleFileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request){ if (!file.isEmpty()) { if(!file.getContentType().contains("image")) { return "неверный формат"; } try { String originalFilename = file.getOriginalFilename(); String format = originalFilename.substring(originalFilename.lastIndexOf(".")); String fileName = System.currentTimeMillis() + format; byte[] bytes = file.getBytes(); BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(/*avatarsPath + */fileName))); stream.write(bytes); stream.close(); UserData userData = (UserData) request.getSession().getAttribute("userData"); UserService userService = new UserService(); UserEntity user = userService.findById(userData.getId()); if(user.getAvatar() !=null){ File oldFile = new File("avatarsPath"+user.getAvatar() ); oldFile.delete(); } user.setAvatar(fileName); userService.update(user); return "ok"; } catch (Exception e) { return "Вам не удалось загрузить => " + e.getMessage(); } } else { return "Вам не удалось загрузить потому что файл пустой."; } } } 

Stektreys

 org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1303) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:977) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:191) org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:350) org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158) org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142) org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1089) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:928) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164) org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:191) org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:350) org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158) org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142) org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1089) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:928) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

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

 [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ findparty --- [INFO] ru.sidorov:findparty:war:1.0-SNAPSHOT [INFO] +- commons-fileupload:commons-fileupload:jar:1.3.1:compile [INFO] | \- (commons-io:commons-io:jar:2.2:compile - omitted for conflict with 2.4) [INFO] \- commons-io:commons-io:jar:2.4:compile 

mvn dependency: list-repositories

 [INFO] Repositories Used by this build: [INFO] id: jboss-public-repository url: http://repository.jboss.org/nexus/content/groups/public/ layout: default snapshots: [enabled => true, update => daily] releases: [enabled => true, update => daily] [INFO] id: central url: https://repo.maven.apache.org/maven2 layout: default snapshots: [enabled => false, update => daily] releases: [enabled => true, update => daily] [INFO] id: my-alternate-repository url: http://www.mvnrepository.com layout: default snapshots: [enabled => true, update => daily] releases: [enabled => true, update => daily] [INFO] id: jboss url: https://repository.jboss.org/nexus/content/repositories/releases layout: default snapshots: [enabled => true, update => daily] releases: [enabled => true, update => daily] [INFO] id: springsource-milestones url: https://oss.sonatype.org/content/repositories/springsource-milestones layout: default snapshots: [enabled => true, update => daily] releases: [enabled => true, update => daily] [INFO] id: maven central url: http://repo1.maven.org/maven/ layout: default snapshots: [enabled => true, update => daily] releases: [enabled => true, update => daily] 

Decision

I could not understand why the application does not see the library that is in the cooker. I decided to just put commons-fileupload and commons-io into the tomkata libraries. On jboss it rose without any manipulations at all and without dependencies commons-fileupload and commons-io in pom 'e

    1 answer 1

    Spring uses commons-fileupload to upload files. This is an optional dependency , so the problem you get is only in runtime. Add to the project:

     <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> 

    commons-io pull itself up, but can be announced separately

     <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> 

    Update

    Check that you have MultipartResolver configured.

    Annotation Example

     @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public MultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setDefaultEncoding("UTF-8"); return multipartResolver; } } 

    XML example

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

    Upgrade servlet-api at least 3.0


     sandbox/test » mvn dependency:tree -Dverbose -Dincludes=commons-io [INFO] test:test:war:0.0.1-SNAPSHOT [INFO] +- commons-fileupload:commons-fileupload:jar:1.3.1:compile [INFO] | \- (commons-io:commons-io:jar:2.2:compile - omitted for conflict with 2.4) [INFO] \- commons-io:commons-io:jar:2.4:compile 
    • commons-fileupload connected - Sapphiron
    • @Sapphiron Well then, share the full information. pom.xml your pom.xml , controller code together with imports. What do you have for Tomkat, with what keys it is running, that he has in ./lib is ... - enzo
    • added pom, controller and spectra - Sapphiron
    • @Sapphiron updated - enzo
    • one
      @Sapphiron Try building a mvn clean install . Add the output of the command to the question. mvn dependency:tree -Dverbose -Dincludes=commons-io - enzo