import
maven 和Java一样都是 单继承 机制,在maven的pom文件中只能有一个<parent>标签,继承一个父工程,然后父工程通过dependencyManagement管理依赖,子工程选择性继承
问题1
提出问题:
在 springboot 应用,要求继承父工程spring-boot-starter-parent,如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
但是如果想 继承其他父工程,或者 不想继承父工程,就无法实现了
解决问题:
通过<scope>import</scope>导入工程
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
提出问题2
提出问题:
在聚合工程中,一般父工程在dependencyManagement管理大量依赖,繁杂混乱,不方便管理
解决问题:
为了更清晰的管理,将这些依赖分类写在不同的工程中,用到哪个功能时,就通过<scope>import</scope>导入该工程
总结
好处:
1、单一职责原则,根据依赖的分类,细化每一个单一职责的pom文件
2、解决单继承问题,通过import pom文件达到依赖的目的(典型的非继承模式),从而不用从父类中引用依赖
3、父模块的pom就会非常干净,容易维护
test (测试范围)
test 范围依赖 编译 和 运行时 都不需要,只有在 测试编译 和 测试运行 阶段可用。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
system (系统范围)
不从maven仓库获取该jar,而是通过 systemPath 指定该jar的路径
注意:该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。