基于 maven 的 Spring Boot 项目,我们通常会指定 spring-boot-starter-parent
作为当前项目 pom 的 parent,大多数人都知道这可以用于依赖管理,以便引入依赖时可以省略版本号,这篇我们聊点不一样的。
maven 中的继承
spring-boot-starter-parent
作为 maven pom 中的 parent,我们需要先了解下 maven pom 中的 parent 有什么作用。
我们经常在多个项目中引入相同的依赖,如 Spring MVC 相关依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
</dependencies>
对于相同的部分,作为程序员的我们下意识的会将其提取到公共的部分,maven 提供了类似 Java 的继承机制,只要将依赖加入到 parent,继承 parent 的项目会自动引入 parent 中的依赖。
定义如下的 parent:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zzuhkp</groupId>
<artifactId>project-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
</dependencies>
</project>
这里定义了一个名为 project-parent
的 maven 项目,并引入了 spring-boot-starter-web
,再创建一个子项目。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zzuhkp</groupId>
<artifactId>project-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.zzuhkp</groupId>
<artifactId>spring-boot-child1</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
子项目 spring-boot-child1
项目中仅引入了上面我们定义的 parent,以相同的方式定义一个子项目 spring-boot-child2
,借助 idea 内置 maven 支持功能,查看各项目的依赖情况。