不继承SpringBoot的parent项目

问题

我们在使用spring initializr创建SpringBoot项目时,pom.xml文件中默认会继承spring-boot-starter-parent这个父项目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

...
</xml>

这样的好处是,你不用再关心引入的SpringBoot各组件的版本。但是问题是Maven项目不能多继承,如果是公司或组织内部已经有了父项目需要继承,这个方案就行不通了。

方案

解决办法就是在dependencyManagement中引入spring-boot-dependencies,这样就可以让SpringBoot帮我们解决依赖管理,同时还能引用我们自己的Parent项目了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<properties>
<java.version>1.8</java.version>
<spring.boot.version>2.5.4</spring.boot.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

授之以渔

几乎没有人能默写下来这样一段代码模板,那我们该如何现用现查呢,怎么才能找到官方对于这个功能的参考文档呢?

  1. 打开Spring的官网,在首页的Projects下拉列表中,找到Spring Boot
    image-20210908100459218
  1. 切换到“LEARN”标签,定位到你使用的SpringBoot版本,点击“Reference Doc.”超链接:
    image-20210908100551029
  1. 打开Single page HTML这个超链接:
    image-20210908101044344

  2. 依次定位到“Developing with Spring Boot“ –> “Build Systems“ –> “Maven“,然后点击Reference的HTML:
    image-20210908101412934

  1. 依次定位到”Using the Plugin“ –> “Using Spring Boot without the Parent POM“,有一个好的办法是直接在这个页面搜索“without”这个单词,也可以快速到这块内容
    image-20210908102014174

Spring的参考文档组织的非常规范,比如你打开的是Spring Boot 2.5.3版本的参考文档,https://docs.spring.io/spring-boot/docs/2.5.3/maven-plugin/reference/htmlsingle/#using.import,你可以直接用单词`current`替换掉2.5.3,就可以查看最新版本的文档了,如:https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#using.import。

这对于需要在浏览器一直维护可访问的最新文档,是非常有用的。

EOF