Wi-Blog 项目拆解(一):Maven项目的创建和常用Dependency配置

前言

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 时,该插件会自动执行相应的构建和打包任务,生成可执行的应用程序。

相关推荐
路在脚下@42 分钟前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
啦啦右一43 分钟前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
菠萝蚊鸭3 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪3 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生3 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
ssr——ssss3 小时前
SSM-期末项目 - 基于SSM的宠物信息管理系统
java·ssm