首先调用本地仓库,然后调用公司私服仓库,最后调用中央仓库。
jar的坐标定位
这个标签揭示了jar的查找坐标:groupId、artifactId、version
maven依赖冲突
依赖传递:如果A依赖B,B依赖C,那么引入A,意味着B和C都会被引入。
Maven的最近依赖策略:如果一个项目依赖相同的groupId、artifactId的多个版本,那么在依赖树(mvn dependency:tree)中离项目最近的那个版本将会被使用。(从这里可以看出Maven是不是有点小问题呢?能不能选择高版本的进行依赖么?据了解,Gradle就是version+策略)
A引入B,B引入C。D引入另一个版本的C。那么就近原则,maven引入D相关的版本C。
依赖冲突处理
方法1:显式加入对project-common 2.0版本的依赖。先前的2.0版本不是离resolve-web远了点吗,那我们就直接将它作为resolve-web的依赖,这不就比1.0版本离resolve-web还近吗?在resove-web的pom.xml文件中直接加上对project-common 2.0 的依赖:
`<dependency>
<groupId>project-common</groupId>
<artifactId>project-commmon</artifactId>
<version>2.0</version>
</dependency>
方法2:使用 exclusion 标签接触依赖。
<dependency>
<groupId>project-A</groupId>
<artifactId>project-A</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>project-common</groupId>
<artifactId>project-commmon</artifactId>
</exclusion>
</exclusions>
</dependency>