- 概述
Jar 包沖突是日常開發過程中,時常會遇到的問題。本文介紹由 jstl 的 Maven 依賴導致的 Jar 包沖突問題,以及對應的解決方法。
- jstl 的 Maven 依賴配置
<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
一般來說,只要 pom 文件配置好了 Maven 依賴后,一般都不會有太大的問題。可是,就是這么一個簡單的依賴,導致了整個項目都無法啟動了,經過一段時間的排查,最終鎖定了問題所在。
Tomcat 類庫

項目編譯后的類庫

從上面的2個截圖可以看出,jsp-api 和 servlet-api 這2個 Jar 包重復了,通過進一步的排查,最終確認項目編譯后的類庫多出來的2個 Jar 是由於 jstl-api Jar 包的依賴,通過 Maven 編譯到項目的類庫中的,與 Tomcat 的類庫中對應的2個 Jar 包起了沖突,找到問題的起因后,對 pom 文件做了調整,不編譯 jstl-api Jar 包的依賴的 Jar 包即可解決問題,具體調整如下:
<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
