1.依赖配置
... xx com.yy.xx .. .. ... ....
说明:
groupId,artifactId,version :依赖的基本坐标type:依赖的类型,默认为jarscope:依赖的范围option: 标记依赖是否可选exclusions:排除传递性依赖2.依赖范围
xx com.test.xx test
1》comile:编译时依赖
2》test:测试时依赖3》provided:已提供依赖范围,编译、测试生效,运行时不生效(例如servlet-api在tomcat中已经自带了,因此运行时不需要重复依赖)4》runtime:运行时依赖,仅对测试、运行生效,编译不生效。5》system:直接指定依赖的文件路径,和provided范围相同xx com.test.xx system ${java.home}/lib/xx.jar
3.传达性依赖(间接依赖)
A-->B-->C A依赖B,B又依赖C,那么A会通过B将C也会依赖过去。
传递依赖的范围取决于第一依赖的范围和第二依赖的范围(左边是第一依赖范围,上面是第二依赖范围,交叉部分为传递依赖范围)
4.依赖调解
1》A->B->E->C1.0, A->D->C2.0 : 此时A会依赖C1还是C2 ?
---依赖原则1:路径最近者优先
2》A->B->Y1.0, A->C->Y2.0 : 此时A会依赖Y1还是Y2 ?
---依赖原则2:第一声明优先
5.可选依赖
A->B, B->X(可选), B->Y(可选)
如果3者依赖范围都是compile,则X,Y都是A的compile的依赖范围,但是由于X/Y都是可选依赖,所以X,Y不会被传递
6.排除依赖
exlusions可通过*排除所有依赖,也可以排除一个,或者多个。
xx com.yy.xx .. * * xx com.yy.xx .. x1 com.xx.x1 xn com.xx.xn
7.依赖优化
mvn dependency:list 查看依赖列表
mvn dependency:tree >a.txt 查看依赖树,生成a.txt
mvn dependency:analyze
依赖分析:展示结果有两部分
1>Used undeclared dependencies : 表示项目中使用到了,但是没有显示声明的依赖
2>Unused declared dependecies : 表示项目中未使用到,但是显示声明了的依赖,不能简单直接删除需要分析一下scope
dependency:analyze只能分析编译、和测试范围的依赖。