使用poi導出Excel表格,jar包沖突


HTTP Status 500 – Internal Server Error
Type Exception Report
Message Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setAlignment(S)V
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setAlignment(S)V
org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1302)
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:968)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.rongdu.cashloan.core.common.web.filter.PerformanceMonitorFilter.doFilterWithProfile(PerformanceMonitorFilter.java:57)
com.rongdu.cashloan.core.common.web.filter.PerformanceMonitorFilter.doFilter(PerformanceMonitorFilter.java:43)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
com.rongdu.cashloan.core.common.web.filter.RemoteAddressFilter.doFilter(RemoteAddressFilter.java:51)
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Root Cause

我的解決思路:

首先,我查看了業務代碼,在導出Excel表格的時候需要一些必要的參數,標題,打印數據,Excel表格格式等....先確保業務代碼沒有問題。

第二,在確保業務代碼沒有問題的前提下,分析異常,(Message Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setAlignment(S)V)提示信息為沒有找到當前方法。如果找不到方法,那么編譯的時候是不是應該提示出來。既然編譯的時候沒有報錯,運行時出現,最有可能的是沒有找到相應的包,找不到包的錯誤有一下幾種

1.jar包沒有導入;

2.jar存在,版本不正確;

3.jar存在,都放在lib下,由於引入的其他jar有使用同樣的jar,但是版本不一樣。導致jar包沖突。

第1種,在maven中添加,不是maven項目的,自行加入lib中。

第2種和第3種,打印使用類的引用路徑。用以確定包的具體路徑。然后反編譯看看里面是否有相應的方法。如果有還會報錯,那要么換高版本的,要么換低版本的包(HSSFWorkbook類名)

System.out.println("引用包路徑為:"+HSSFWorkbook.class.getProtectionDomain().getCodeSource().getLocation());

第三,由於業務暫時不需要使用另外一個第三方的jar,我直接在pom中添加<scope>provided</scope>,也可以在對應的jar包中添加

<exclusions>
   <exclusion>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
   </exclusion>
</exclusions>

第四,可以使用Maven Helperjar的依賴關系進行分析,詳細請參考:https://blog.csdn.net/noaman_wgs/article/details/81137893,由於講的很詳細,不在描述。

 

參考路徑:

https://www.cnblogs.com/qxqbk/p/7655307.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM