為什么項目的jar包會和tomcat的jar包沖突?
碰到這個問題,猜測tomcat啟動時會將自己的lib和項目的lib在邏輯上歸並為一個大的lib,但是並沒有做版本區分以及去重,這樣相同的包可能就有兩個引用,啟動時自然就不知道用哪個包了,從而引發沖突。純屬猜測,等研究了tomcat的加載過程之后再補充更正。之前下載的How Tomcat Works.pdf還沒來得及看,應該能解答所有問題,純英文版的。
一下是tomcat\lib下的包,框出來的是容易不小心二次引入的包,注意下就好了。
補充:
使用maven管理包的時候,如果有和tomcat沖突的,就可以使用下面的三種方式解決。注意api包和獨立包的區別,api包會將依賴的包一並引入,如此一部分沖突一部分不沖突就很是煩人,只能使用user library搞定。
原文:http://blog.sina.com.cn/s/blog_6a6b141001011xcz.html
解決方法1:User Library
選中項目-->右擊-->properties-->Java Build Path --> Add Library --> 選中 User Liberary -->
Next --> User Libraries... --> New -->如下一定要選中:口 System Library.... (作為系統庫像JDK一樣)
--> Add Jars -->導入 與Tomcat沖突jar --> 選中jsp-jar OK
解決方法2:修改配置
打開項目目錄,編輯.classpath文件
將:<classpathentry kind="lib" path="/............/jsp-jar"/>
改:<classpathentry kind="con" path="/............/jsp-jar"/>
解決方法3:
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency>
provided可以避免在發布的時候把jsp-api包拷到lib目錄下