SpringBoot 依赖探究

# 依赖项溯源

在工程 pom.xml 文件中,存在父工程的 pom.xml

<!-- springboot_demo/pom.xml -->

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.16</version>
</parent>
...
1
2
3
4
5
6
7
8
9

这个父工程也有它的父工程

<!-- spring-boot-starter-parent-2.7.16/pom.xml -->

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.16</version>
</parent>
...
1
2
3
4
5
6
7
8
9

在 spring-boot-dependencies 中存在一系列的变量与依赖管理

<!-- spring-boot-dependencies-2.7.16/pom.xml -->

...
<!--变量,主要是一些版本号-->
<properties>
...
    <junit.version>4.13.2</junit.version>
...
</properties>
<!-- 依赖管理,主要是一些利用上面变量作为版本号的依赖 -->
<dependencyManagement> 
...
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
    </dependency>
...
</dependencyManagement>
<build...>
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

有了这些,我们在自己的工程的 <dependencies> 中只需要加上所需的依赖不需要加版本即可

然后是我们工程 pom 中的两个依赖

<!-- springboot_demo/pom.xml -->
...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
...
1
2
3
4
5
6
7
8
9
10
11
12
13

其中第二个依赖就是一些 spring-test 依赖
第一个依赖中存在 spring-webspring-webmvcspring-boot-starter-tomcat
这三个帮助我们开发 web 程序,并且内置了一个 tomcat 服务器便于我们启动

而在 SpringbootDemoApplication 中

// SpringbootDemoApplication.java

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

}
1
2
3
4
5
6
7
8
9
10

SpringApplication的启动会根据 pom.xml 中的配置来启动程序
比如我存在 web ,那启动会作为一个 web 服务器启动

# 依赖项变更-tomcat切换jetty

由于 springboot 的祖先级 pom 都是官方配好的只读的,我们不能利用可选依赖,使用排除依赖
找到 pom.xml 中 web 那一块
将其 tomcat 排除掉,然后在下面再添加一个 jetty 的依赖

<!-- springboot_demo/pom.xml -->

...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 排除项 -->
    <exclusions>
        <exclusion>
            <!-- 排除 tomcat 依赖 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 加入 jetty -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

maven 刷新一下,少了 tomcat 多了 jetty
20231002102317
运行起来就可以发现是用的 jetty
20231002102401
postman 也正常交互了
20231002102437

Last Updated: 10/8/2023, 5:27:41 PM