Skip to content

Latest commit

 

History

History
62 lines (44 loc) · 1.97 KB

依赖.md

File metadata and controls

62 lines (44 loc) · 1.97 KB

依赖

1. 如何配置依赖?

参考:pom.xml


2. <scope>: 依赖范围

依赖范围 说明
compile 编译依赖范围 在测试、编译和运行时都会引入。如果没有指定 scope,默认就是 compile。
test 测试依赖范围 仅在执行测试代码时引入。
provided 已提供依赖范围 在测试和编译时引入,但在运行时无效。典型的例子就是 servlet-api,编译和测试项目的时候需要使用到该依赖,但运行项目的时候,由于容器已经提供,就不需要 Maven 重复引入一遍。
runtime 运行时依赖范围 在测试和运行时引入。
import 导入依赖范围

3. 传递性依赖

对于依赖的依赖,Maven 都会一个个解析,以传递性依赖的形式引入当前项目中。

3.1 Maven 如何解决传递性依赖导致的依赖冲突?

因为传递性依赖,一个项目中可能会使用到同一种依赖的不同版本,Maven 是用这两种原则解决:

  • 依赖路径最短优先,例如:A->B->C->X(1.0) 和 A->D->X(2.0),X(2.0) 会被解析使用。
  • 如果依赖路径长度一样,最先声明优先,例如:A->B->Y(1.0) 和 A->C->Y(2.0),依赖 B 声明在 C 前,所以 Y(1.0) 会被解析使用。

3.2 如何排除某个传递性依赖?

有时候不想使用某些传递性依赖,想自己配置该依赖的另一个版本,这就需要使用 <exclusions> 排除传递性依赖。

<project>
  ...
  
  <dependencies>
    <!--
    <exclusions>: 用来排除传递性依赖
    -->
    <dependency>
      <groupId>com.test</groupId>
      <artifactId>A</artifactId>
      <version>${A.version}</version>
      <exclusions>
        <exclusion>
          <groupId>com.test</groupId>
          <artifactId>B</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    ...
  </dependencies>

  ...
</project>