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

相关文章
相关标签/搜索