前几天做了一个excel上传导入功能,为了通用想同步支持xls和xlsx格式。代码编写期并没有报错,所需要的类也都有。可是应用启动完测式功能的时候报了这么一个错 Caused by: java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Date1904Support 这是为什么呢?我第一感觉是jar包冲突引起的。但是并没有找到同一个包有两个版本, 后来仔细一看poi和poi-ooxml版本不一样。难道是这个问题引导起的便尝试把版本号改为一致的。改了以后还是不行。又折腾了半天,后来发现我改的版本号并没有生效,原来poi maven引用配置在了dependencyManagement里而我改的是dependency里的引用。所以没有起作用。又犯了一个低级错误 。解决这个问题可以总结为以下两点:
1.引有poi.jar和poi-ooxml.jar两个包版本要一致.
2.修改maven依赖jar包版本号时要注意找一下jar包版本是否在dependencyManagement管理。如果存在修改dependencys引用里的版本号是不起作用的 。所以如果在dependencyManagement里管理版本号那么dependencys引用的时候就不要再写版本号了。
如果解析excel同步支持xls和xlsx依赖包下如:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
excel上传解析错误
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Date1904Support
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at com.aliyun.devata.cms.web.controller.AdminMessageController.importEmpInfo(AdminMessageController.java:139)
at com.aliyun.devata.cms.web.controller.AdminMessageController$$FastClassBySpringCGLIB$$baba469f.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)
at com.aliyun.devata.cms.web.controller.AdminMessageController$$EnhancerBySpringCGLIB$$4065efb5.importEmpInfo(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
... 100 common frames omitted