问题描述:
下载了一个新项目,下载完所有的依赖,发现maven的的依赖在idea的里面报红,感觉很懵,全部下载完成后,还是报错.
分析:
1.首先查看自己本地仓库,发现jar包下载在仓库里面
2.仓库的坐标如下:
3.根据之前的经验,首先找到pom坐标的位置,注释掉这个坐标
4.然后执行clean命令,然后打开注解 然后import change ,然后发现项目报红没有了
分析
- 首先想说一下,maven的包的冲突是如何产生的?
首先假设(-> 表示依赖的关系) A->B->C->D1, E->F->D2,D1,D2 分别为 D 的不同版本。如果pom中引入了A和E之后,按照 Maven 传递依赖原则,工程内需要引入的实际 Jar 包将会有:A B C D1 和 E F D2,因此 D1,D2 将会产生包冲突.或者依赖关系不存在
如何解决包冲突
- Maven 解析 pom.xml 文件时,同一个 jar 包只会保留一个,这样有效的避免因引入两个 jar 包导致的工程运行不稳定性。
Maven 默认处理策略
- 最短路径优先
Maven 面对 D1 和 D2 时,会默认选择最短路径的那个 jar 包,即 D2。E->F->D2 比 A->B->C->D1 路径短 1。 - 最先声明优先
如果路径一样的话,举个🌰: A->B->C1, E->F->C2 ,两个依赖路径长度都是 2,那么就选择最先声明。
检测包冲突工具
mvn dependency:help
mvn dependency:analyze
mvn dependency:tree
mvn dependency:tree -Dverbose