Maven jar包衝突

 

在pom.xml中引入一個依賴,maven會自動導入這個依賴的依賴,方便的同時也會形成jar包衝突:api

(1)A、B都依賴C,咱們導入A(自動導入C)、B(自動導入C),maven自動導入了2個C,到底使用哪一個C?這2個C衝突了,maven不知道該用哪一個。tomcat

(2)A依賴C,咱們導入A(自動導入C),咱們不知道已經有了C,本身又手動導了一個C。jsp

咱們直接導入的依賴叫作直接依賴,好比A;maven自動導入的直接依賴的依賴,叫作間接依賴,好比C。maven

 

解決費方式:測試

  • 若是衝突的包都是直接依賴、或者都是間接依賴,把要使用的那個放前面,先聲明的有效
  • 若是衝突的包一個直接依賴、一個實間接依賴,把要用的寫成直接依賴,直接依賴的優先級比間接依賴高

 

 


 

 

還多是由於jar包的做用域:xml

(3)好比要使用HttpServletRequest,須要導入servlet-api.jar、jsp-api.jar,這樣寫代碼時纔有相應的代碼提示,IDEA纔不會提示紅色。blog

    但測試、運行時要部署到tomcat上,tomcat自帶了servlet-api.jar、jsp-api.jar,衝突了,tomcat不知道要用哪一個。作用域

 

解決方式:部署

  • 使用<scope>設置做用域
  • 若是沒有合適的做用域,好比上面2個jar只在編譯時使用,但沒有隻在編譯時起做用的做用域(compile是編譯、測試、運行都有效),先添加進來,用完註釋掉便可。

 

 


 

 

 

可查看項目的依賴關係圖:servlet

相關文章
相關標籤/搜索