maven背景
Maven 中的依赖是有传递(Transitive)性的,默认会包含传递的依赖,这样就不用手动引用每一个依赖了.
由于传递依赖,因为多个传递下同一个jar包的版本不同,很可能会有包冲突等一系列问题。
解决这个依赖传递导致的冲突问题,有两种方案:
- 在使用者,也就是发起依赖方进行排除
<exclusions></exclusions> - 在提供方,将依赖的范围定义为不传递
<scope>provided</scope> 和<optional>true</optional>就是在提供方配置不传递的标签
optional 可选的
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
可以理解为此功能/此依赖可选,如果不需要某项功能,可以不引用这个包
scope provided 提供的
<dependency>
<groupId>org.apache.submarine</groupId>
<artifactId>server-api</artifactId>
<scope>provided</scope>
</dependency>
可以理解为此包不由我直接提供 需要调用者/容器提供