maven scope 依赖范围、传递性依赖、依赖调解、可选依赖

1,依赖范围

maven的依赖范围主要是用来控制的。

Maven有三套classpath:
1)编译源码时
2)编译测试代码以及执行测试代码
3)运行项目时

scope就是用来设置classpath作用范围的,这样讲有点模糊,直接看代码

  • compile
    默认,对编译、测试和运行的classpath都有效。
  • test
    对测试的classpath有效,例如junit
  • provided
    对编译和测试的classpath有效,因为可能环境已经提供了,例如servlet-api
  • runtime
    对测试和运行的classpath有效,比如jdbc的驱动
2,传递性依赖

每个依赖可能又有其他的依赖,其他依赖又有其他的依赖,循环往复。
传递性依赖会因为scope不同,会导致依赖的范围有所不同,可以参考下表:
第一列是一级依赖,第一行是二级依赖

  compile test provided runtime
compile compile     runtime
test test     test
provided provided   provided provided
runtime runtime     runtime
3,依赖调解
  • 比如A->B->C->X(1.0),A->D->X(2.0),A有两个传递性依赖X,不同的版本就产生了依赖冲突的问题,依赖调解的机制此时就会就近原则,离A最近的选用,就是X的2.0版本

  • 如果A->B->X(1.0)和A->D->X(2.0),路径等长呢?那么会选择第一声明原则,哪个依赖在pom.xml里先声明,就用哪个

4,可选依赖

true此时依赖传递失效,不会向上传递

你可能感兴趣的:(maven)