1、传递性依赖
account-mail有一个compile范围的Spring-core依赖,spring-core又一个compile范围的common-logging依赖
那么common-logging会成为account-email的compile范围依赖,即common-logging是account-email的一个
传递性依赖。
假设a依赖于b,b依赖于c,a对于b是第一依赖,b对于c是第二依赖,a对于c是传递性依赖。
下图最左边为第一依赖,上面是第二依赖。
第二依赖的不同会影响传递性依赖。
2、可选依赖(optional)
可选依赖不会传递,必须再次声明依赖。
但是值得注意的是在理想的情况下,是不应该使用可选依赖的。在面对对象设计中,有一个单一职责原则
一个类应该只有一个功能。
3、排除依赖
传递性依赖虽然会隐式的引入依赖,但是有时也会带来麻烦。通过在dependency中使用exclusion排除依赖。
值得注意的是在声明exclusion时只需要groupid和artifactid,不要version。
4、归类依赖
在一个地方定义版本,在dependency声明中引用这一版本
<properties>
<springframework.version>2.5.6</springframework.version>
</properties>
.....
<dependency>
...
<version>${springframework.version}</version>
5、优化依赖
maven会自动解析所有项目的直接依赖和传递性依赖,并且根据规则正确判断每个依赖的范围(要注意冲突依赖的调解,确定只有唯一版本在使用)
在这些工作之后,最后得到的依赖被称为已解析依赖
mvn dependency:list
mvn dependency:tree
mvn dependency:analyze