解決Maven專案下新增HttpServletRequest 或 HttpServletResponse需引用的依賴包報錯
阿新 • • 發佈:2019-02-14
今天在開發中遇到了一個問題,專案中需要HttpServletRequest 和 HttpServletResponse 但是我專案是用maven啟動的,需要手動匯入servlet-api.jar包
我開始是這樣匯入的
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
但是專案中報了莫名其妙的錯誤Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/servlet/ServletContext"
查到的原因以及解決辦法
產生的原因是:tomcat中也有servlet-api包,這樣,發生了衝突
解決方法:新增<scope>provided</scope>,因為provided表明該包只在編譯和測試的時候用,所以,當啟動tomcat的時候,就不會衝突了,完整依賴如下:
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
很坑爹,開始報錯的時候不知道是什麼原因,以為程式碼有問題,之後才發現是導包的問題,浪費了一早上。