坐标和依赖

坐标:

  为了标识 Java 构件世界中的某个构件

  groupId:项目,一般是公司或组织

  artifactId:模块,推荐使用项目名作为前缀,如 spring-core,spring-bean 等

  version:版本

  packaging:打包方式,默认为 jar

  classifier:帮助定义构建输出的一些附属构件。一般很少用到这个

举例:

1     <dependencies>
2         <dependency>
3             <groupId>junit</groupId>
4             <artifactId>junit</artifactId>
5             <version>4.12</version>
6             <scope>test</scope>
7         </dependency>
8     </dependencies>

依赖的配置

  以上几个元素,可以标识一个构件在 Java 世界中的位置,那么具体如何被依赖使用呢?

  type:对应于 packaging,一般为 jar

  scope:依赖的范围

  optional:依赖是否可选

  exclusions:排除传递性依赖

依赖范围

  依赖范围用来控制依赖与三种 classpath 的关系:编译 classpath、测试 classpath、运行 classpath

  compile:编译依赖范围,默认依赖范围。对于编译、测试、运行三种 classpath 都有效。如:spring-core

  test:测试依赖范围。只在测试 classpath 有效。如:junit

  provided:已提供依赖范围,编译和测试有效,运行时无效。如:servlet-api。运行的时候由容器提供

  runtime:运行时依赖范围,测试和运行时有效,编译时无效。如:JDBC 驱动的实现

  system:系统依赖范围

  import:导入依赖范围

依赖的传递性

  项目依赖 A,A 依赖 B。那么在使用 Maven 引入 A 的时候,A 会自动将其依赖的 B 也引入

依赖调节

  同一个构件可能被多个依赖所依赖,这个时候使用哪个构件?

  

  第一原则:路径短的优先

  第二原则:先声明的优先

可选依赖

  项目 A 依赖于 B,那么在构件的世界里,如果一个项目引入了 A,那么同时也会引入 B,如果不想 B 被引入怎么办?就需要将 B 设置为一个可选的依赖

  就是添加了一个 optional 属性

排除依赖

  项目 A 依赖项目 B,如果我们要引入 A 而又不想通过依赖传递引入 B,那么可以使用排除依赖

  

 1         <dependency>
 2             <groupId>junit</groupId>
 3             <artifactId>junit</artifactId>
 4             <version>${junit.version}</version>
 5             <scope>test</scope>
 6             <exclusions>
 7                 <exclusion>
 8                     <groupId></groupId>
 9                     <artifactId></artifactId>
10                 </exclusion>
11             </exclusions>
12         </dependency>
原文地址:https://www.cnblogs.com/sherrykid/p/5907282.html