一. 依赖范围
二. 依赖传递
A <-- B <-- C
: C依赖于A,但不一定会用到A- 怎么去除C对A的依赖:
<exlusions></exclusions>
标签的使用
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
三. 依赖冲突
依赖冲突即在传递依赖中出现类似A->B->C B依赖A,C依赖B,A和B中都有1.jar,而C中到底是引入谁的jar呢?
,依赖冲突有两个原则:
(1)短路优先原则:这种情况下C引入的B中的jar包
(2)最先声明原则:在路径相同的情况下,谁先声明就引入哪个jar;比如A->C,B->C
,在C中先声明了A的引入后声明B,则C中引入的是A的jar包
四. 依赖聚合&继承
(1)聚合:当一个项目依赖于其他多个项目本身package后的jar包时,要先编译打包依赖的项目,再编译打包当前项目;使用聚合可以一次达到目的!!!
<modules>
<module>my-project</module>
<module>another-project</module>
<module>third-project/pom-example.xml</module>
</modules>
(2)继承:就是jar包的继承使用关系,若A要继承B中的junit包
,可以这么做:
B 的 pom.xml :
<dependencyManagement>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependencyManagement>
A引入B中的junit:
<parent>
<groupId>B's groupId</groupId>
<artifactId>B's artifactId</artifactId>
<version>B's version</version>
</parent>
......
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>