前言
Maven是一个标准化的java项目管理和构建工具,其关键在于pom.xml文件内容。pom.xml中需要指定项目依赖,Maven会自动下载依赖的包并缓存到本地。对SpringBoot项目来说,其依赖关系大同小异,接下来将以Wi-Blog项目对每个包及其作用进行解析。
Parent
xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/>
</parent>
<parent> 元素,它用于指定项目的父级项目。父级项目通常是一个公共的 Maven 项目,它定义了一些共享的配置和依赖项,供子项目继承和重用
具体来说,当你将 spring-boot-starter-parent 作为父级项目时,它会自动为你的项目提供以下功能:
- 默认的 Maven 配置:spring-boot-starter-parent 定义了一些默认的 Maven 配置,例如编译、测试、打包等配置。这样你就不需要在子项目中重复定义这些配置,而是直接继承父级项目的配置。
- 默认的 Spring Boot 版本:spring-boot-starter-parent 指定了一个默认的 Spring Boot 版本。这意味着你可以在子项目的依赖项中使用 Spring Boot 相关的库和插件,而不需要显式指定版本号。子项目会继承父级项目的版本号,并与之保持一致。
- 默认的依赖项管理:spring-boot-starter-parent 会管理一些常用的 Spring Boot 相关依赖项的版本。这样,你可以在子项目的 dependencies 部分引入这些依赖项,而不需要显式指定版本号。
- 通过使用 spring-boot-starter-parent 作为父级项目,你可以获得这些默认配置和依赖项管理的好处,并且可以更轻松地构建和管理基于 Spring Boot 的应用程序。
<relativePath/> 是一个用于 Maven 项目中 元素的可选子元素。
当你在 Maven 项目中使用 元素来引用一个父项目时,可以通过 元素来指定父项目相对于当前项目的路径。默认情况下,Maven 会在本地的仓库中查找父项目的坐标信息,并下载相应的父项目。但是,如果你在本地的项目结构中已经包含了父项目,你可以使用 元素来告诉 Maven 父项目的相对路径,以便 Maven 在本地项目中查找父项目,而不是去下载。
Properties
xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
指定项目源代码的编码格式,指定项目报告的输出格式,也指定了项目使用的java版本
properties 元素可以定义任意数量的属性,根据项目的需要进行自定义。这些属性可以根据项目的要求来定义。后续使用的时候只需要使用对应定义的
${PropertyName}$
即可
Dependency
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
- org.springframework.boot:spring-boot-starter-thymeleaf: 这个依赖项提供了使用 Thymeleaf 模板引擎的 Spring Boot 支持。Thymeleaf 是一个流行的服务器端 Java 模板引擎,用于构建动态的 Web 页面。
- org.springframework.boot:spring-boot-starter-web: 这个依赖项是 Spring Boot 的 Web Starter,提供了构建 Web 应用程序所需的核心组件和依赖项。它包括 Spring MVC、Tomcat 等。
- org.springframework.session:spring-session-core: 这个依赖项提供了 Spring Session 的核心功能,用于在分布式环境下管理和跟踪用户会话。Spring Session 提供了一种抽象层,可以让你在不同的会话存储后端(如 Redis、JDBC 等)之间进行切换,从而实现会话管理的灵活性和可扩展性。
- org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2: 这个依赖项提供了在 Spring Boot 中使用 MyBatis 持久化框架的支持。MyBatis 是一个开源的持久化框架,将数据库查询和映射到 Java 对象之间的操作进行了简化
xml
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<version>5.8.7</version>
</dependency>
该依赖项是 Hutool 库的验证码模块,用于生成和验证验证码。Hutool 是一个开源的 Java 工具库,提供了许多实用的工具类和方法,用于简化 Java 开发过程。
具体来说,"hutool-captcha" 模块提供了生成和验证验证码所需的功能。它可以用于生成各种类型的验证码,如数字验证码、字母验证码、图形验证码等。同时,它还提供了验证用户输入的验证码是否正确的方法
xml
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark</artifactId>
<version>0.17.0</version>
</dependency>
<!-- commonmark table -->
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-gfm-tables</artifactId>
<version>0.17.0</version>
</dependency>
第一个依赖项是 "commonmark",是 CommonMark Java 库,用于解析和处理 Markdown 格式的文本,如前面所述。
第二个依赖项是 "commonmark-ext-gfm-tables",是 CommonMark 扩展库,提供了对 GFM(GitHub Flavored Markdown)表格的支持。GFM 是在标准的 CommonMark 基础上扩展的一种 Markdown 变体,增加了一些额外的功能,其中之一就是表格。这个扩展库允许你在 Markdown 文本中使用 GFM 表格语法,并提供相应的解析和渲染功能
xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
在 Maven 项目中添加这个依赖项后,你可以使用 JDBC API 来建立与 MySQL 数据库的连接,并执行各种数据库操作,如查询、插入、更新、删除等。这个依赖项提供了与 MySQL 数据库进行通信所需的类和方法。
注意 元素被设置为 "runtime"。这表示该依赖项仅在运行时才需要,而不是在编译时。这通常是因为 MySQL 驱动程序只在运行时用于连接数据库,而不是在编译期间。
编译期间导入(即在代码中使用 import 语句)用于告诉编译器在编译代码时从指定的包中引入所需的类或接口。这样可以让编译器在编译过程中正确解析和检查代码,以便在编译时进行类型检查、语法检查等。编译期间导入对于编译器来说是必需的,它确保代码在编译时可以正确地找到所需的类和接口,并且可以进行正确的类型检查。
运行期间导入(即在运行时加载类或使用反射机制动态加载类)也是可能的。在某些情况下,你可能希望在运行时根据条件或配置来加载特定的类。运行期间导入的主要影响是,在运行时才会加载和使用类,而不是在编译时。这意味着编译器不会对运行时导入的类进行类型检查,因为它们在编译时可能是未知的。这可能导致运行时出现类找不到、类型转换错误等异常,如果使用不当,可能会导致程序运行失败。
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
该依赖项是用于在 Spring Boot 应用程序中进行测试的启动器。它包含了一些常用的测试框架和工具,使得编写和执行测试变得更加方便。
在 Maven 项目中添加这个依赖项后,你可以使用 Spring Boot 测试框架来编写和运行各种类型的测试,例如单元测试、集成测试和端到端测试。这个依赖项提供了许多与测试相关的类和方法,以及集成了一些流行的测试库和工具,如 JUnit、Mockito、AssertJ 等。
build
xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
这个 元素包含了一个 Maven 插件的配置,即 "spring-boot-maven-plugin"。该插件是 Spring Boot 提供的用于构建和打包应用程序的 Maven 插件。
通过在 Maven 项目的 部分配置这个插件,可以使用 Maven 命令来构建和打包 Spring Boot 应用程序。
具体来说,这个插件的主要作用是将 Spring Boot 应用程序打包为可执行的 JAR 文件或 WAR 文件,并且可以包含一个内嵌的 Web 服务器,使得应用程序可以直接运行。
当你运行 Maven 命令如 mvn package 或 mvn spring-boot:run 时,该插件会自动执行相应的构建和打包任务,生成可执行的应用程序。