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