作者:jajian
http://cnblogs.com/jajian/p/11002521.html
推薦閱讀(點擊即可跳轉閱讀)
1. SpringBoot內容聚合
2. 面試題內容聚合
3. 設計模式內容聚合
4. 排序演算法內容聚合
5. 多線程內容聚合
1、前言
我們程序員在開發的時候經常會遇到各種各樣的 BUG 問題,其中大部分是業務邏輯異常,還有一些是代碼書寫不規範造成的異常。
例如:NullPointException(NPE),IndexOutOfBoundsException 等等,其實這些我們都好定位和修復。但是還有一些運行時異常定位起來是特別頭疼的,那就是 jar 包衝突引起的異常。
一般程序在運行時發生類似於 java.lang.ClassNotFoundException,Method not found: ……,或者莫名其妙的異常信息,這種情況一般很大可能就是 jar包依賴衝突的問題引起的了。
至於為什麼會發生 jar包依賴衝突?這種問題大致可以歸納為如下幾個原因:
- 版本不匹配,高版本依賴了低版本,或者低版本依賴了高版本。例如引入第三方庫,但是第三方庫基於的是 JDK7,而你們項目使用的是JDK8。
- 重複引入不同版本jar包,造成使用錯誤。很多時候我們引入第三方輪子,它們依賴引入某個基礎工具使用的是 v 1.0 的 jar,但是我們項目中自己也引入了該 jar,但是版本是 v 2.3,這時就會造成項目中使用同一個組件但是依賴了兩個不同版本的jar,衝突就會發生。
可以看到,其實總的來說 jar 包衝突的主要原因就是依賴的版本衝突。
2、異常發生
項目中需要導出報表,技術選型的時候,一般是選用 Apache POI,但是 POI 的使用方式比較基礎,開發量大,容易出現內存溢出的問題。
考慮到阿里開源了一套解析和生成Excel的工具 - EasyExcel,具有避免內存溢出OOM的情況發生,而且使用方便簡單,所以就將它引入到了我們的項目中,具體的使用版本是 1.0.2。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.0.2</version>
</dependency>
而另一個模塊需要使用 POI 的將 Word 轉成 PDF 的功能,所以同時又引入了如下 POI 的依賴:
<!-- poi utils -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
我們從 Maven Repository 可以發現,阿里 EasyExcel 1.0.2 依賴的 POI 也是 3.15,所以照理說應該是沒問題的。