今天突然意识到自从开始使用SpringBoot之后,就再也没有引入过SpringMvc和tomcat等依赖项。这是为什么呢?
先说pring-boot-starter-parent
这段代码是Maven项目中的父项目定义,它使用了Spring Boot提供的spring-boot-starter-parent
作为父项目。
使用spring-boot-starter-parent
作为父项目有以下作用:
- 继承了Spring Boot的默认配置,包括依赖管理和插件配置等,简化了项目的配置工作。
- 确保子项目使用了与Spring Boot版本相匹配的依赖和插件版本。
- 提供了一致的构建配置,使得子项目可以遵循Spring Boot的最佳实践。
通过定义spring-boot-starter-parent
作为父项目,您的子项目可以从Spring Boot的默认配置中受益,并且更容易地与Spring Boot框架进行集成和协同工作。
但它只能是指定版本配置,还需要我们自己引入要用的依赖。
例如,如果您在项目中引入了 spring-boot-starter-web
Starter,它会自动引入一系列与 Web 开发相关的依赖,包括 Spring MVC、Tomcat 等,并且这些依赖的版本都是由 Spring Boot 父项目管理的。
如果您没有显式地引入 spring-boot-starter-web
Starter,而只是继承了 spring-boot-starter-parent
父项目,那么您将无法直接使用 Spring MVC 和嵌入式的 Tomcat 服务器。
Spring Boot 的 Starter 依赖是用于简化项目配置的,每个 Starter 都包含了一组相关的依赖,以便于快速启动特定类型的应用程序。如果您没有引入与 Web 相关的 Starter,Spring Boot 将不会自动包含 Spring MVC 和 Tomcat 等依赖项。
如果您希望在项目中使用 Spring MVC 和 Tomcat,您需要手动在项目的 pom.xml
文件中添加相应的依赖。例如,您可以添加以下依赖来引入 Spring MVC 和 Tomcat:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
通过显式地添加上述依赖,您就可以在项目中使用 Spring MVC 框架和嵌入式的 Tomcat 服务器了。这样可以确保项目具备 Web 应用程序所需的基本功能。
spring-boot-starter-parent
父项目主要用于管理各种常用依赖的版本信息,并没有直接引入所有这些依赖。它定义了一组常见依赖的版本号,以供子项目继承并使用。
一般来说,spring-boot-starter-parent
父项目会管理以下方面的依赖版本:
- Spring Boot 相关依赖:如 Spring Boot 核心模块、Spring Boot Starter 等。
- Spring Framework 相关依赖:包括 Spring Core、Spring MVC、Spring Data 等。
- 测试框架依赖:如 JUnit、Mockito、Spring Test 等。
- 日志框架依赖:如 SLF4J、Logback 等。
- 数据库驱动依赖:如 H2 Database、HikariCP 等。
- Web 开发相关依赖:如 Tomcat Embed、Jackson JSON 等。
这些依赖的版本号是由 Spring Boot 团队维护和管理的,确保了它们之间的兼容性。当您继承 spring-boot-starter-parent
父项目时,可以直接使用这些依赖,并且无需再手动指定版本号。
需要注意的是,并非所有常用依赖的版本都会在 spring-boot-starter-parent
中进行管理,因此在实际开发中,如果有其他特定的依赖需要使用,仍然需要在项目的 pom.xml
文件中显式声明这些依赖并指定版本号。
如果您在项目中显式引入了与 spring-boot-starter-parent
父项目已经管理的依赖相同的版本号,那么您定义的版本号将会覆盖父项目中定义的版本号。
当您在项目的 pom.xml
文件中添加对某个依赖的引用时,Maven 会首先检查您自己的依赖声明。如果您指定了特定的版本号,则会使用您指定的版本号。如果您未指定版本号,则 Maven 会查找父项目中定义的版本号。
如果您想继续使用 spring-boot-starter-parent
父项目中管理的版本号,而不是覆盖它们,请确保在您的项目中不指定特定的版本号。例如,您可以这样声明一个依赖,而不指定版本号:
xml复制代码
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
这样,Maven 将使用 spring-boot-starter-parent
父项目中定义的版本号来解析和引入该依赖。这样做可以确保您使用的依赖与 spring-boot-starter-parent
中的其他依赖保持兼容。