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

2023-09-18 20:49:39

前言

Maven是一个标准化的java项目管理和构建工具,其关键在于pom.xml文件内容。pom.xml中需要指定项目依赖,Maven会自动下载依赖的包并缓存到本地。对SpringBoot项目来说,其依赖关系大同小异,接下来将以Wi-Blog项目对每个包及其作用进行解析。


Parent

    <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

    <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

        <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 对象之间的操作进行了简化

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-captcha</artifactId>
            <version>5.8.7</version>
        </dependency>

该依赖项是 Hutool 库的验证码模块,用于生成和验证验证码。Hutool 是一个开源的 Java 工具库,提供了许多实用的工具类和方法,用于简化 Java 开发过程。

具体来说,“hutool-captcha” 模块提供了生成和验证验证码所需的功能。它可以用于生成各种类型的验证码,如数字验证码、字母验证码、图形验证码等。同时,它还提供了验证用户输入的验证码是否正确的方法


        <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 表格语法,并提供相应的解析和渲染功能


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

在 Maven 项目中添加这个依赖项后,你可以使用 JDBC API 来建立与 MySQL 数据库的连接,并执行各种数据库操作,如查询、插入、更新、删除等。这个依赖项提供了与 MySQL 数据库进行通信所需的类和方法。

注意 元素被设置为 “runtime”。这表示该依赖项仅在运行时才需要,而不是在编译时。这通常是因为 MySQL 驱动程序只在运行时用于连接数据库,而不是在编译期间。

编译期间导入(即在代码中使用 import 语句)用于告诉编译器在编译代码时从指定的包中引入所需的类或接口。这样可以让编译器在编译过程中正确解析和检查代码,以便在编译时进行类型检查、语法检查等。编译期间导入对于编译器来说是必需的,它确保代码在编译时可以正确地找到所需的类和接口,并且可以进行正确的类型检查。
运行期间导入(即在运行时加载类或使用反射机制动态加载类)也是可能的。在某些情况下,你可能希望在运行时根据条件或配置来加载特定的类。运行期间导入的主要影响是,在运行时才会加载和使用类,而不是在编译时。这意味着编译器不会对运行时导入的类进行类型检查,因为它们在编译时可能是未知的。这可能导致运行时出现类找不到、类型转换错误等异常,如果使用不当,可能会导致程序运行失败。


        <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

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

更多推荐

计算机网络运维方向综合知识大全

一.基础知识1.网络的组成组成部分:硬件、软件、协议硬件主要由主机(也称端系统)、通信链路(如双绞线、光纤)、交换设备(如路由器、交换机等)和通信处理机(如网卡)等组成。软件主要包括各种实现资源共享的软件和方便用户使用的各种工具软件(如网络操作系统、邮件收发程序、FTP程序、聊天程序等)。软件部分多属于应用层。协议是计

Mac中IntelliJ IDEA每次打开立刻“意外退出”的解决方法

本文介绍在Mac电脑中,无法打开IntelliJIDEA软件,出现“意外退出”的报错提示,且重启软件依然出现这一情况的通用解决思路与方法。最近,不知道怎么回事,点击图标准备打开IntelliJIDEA软件时,很快就会出现”IntelliJIDEA“意外退出。的提示,如下图所示。且无论怎么样重复打开IntelliJIDE

JPEG算法及例程

JPEG(JointPhotographicExpertsGroup)是一种常见的图像压缩算法,用于减小图像文件的大小。它是一种有损压缩算法,即通过牺牲一定的图像质量来实现压缩。以下是一个简单的JPEG压缩算法的例程:将输入图像转换为YUV颜色空间:将RGB颜色空间转换为亮度(Y)和色度(U和V)分量。这可以通过应用下

MySQL常见面试题(二)

😀前言在数据库管理和操作中,我们常常需要深入理解其各种数据类型、特性和索引类型来优化我们的数据库设计和查询效率。其中,字符串类型和它们如何在MySQL中实现和使用成为了一个必不可少的知识点。同时,我们也需要理解新的特性,如虚拟生成列,它为我们提供了更多的灵活性和优化方案。.除此之外,为了保证数据库操作的准确和高效,我

DEDE织梦标签名称:{/dede:arclist} 详解

DEDE织梦标签名称:{/dede:arclist}详解arclist简介使用实例日期的各种格式底层字段底层模板字段:DEDE织梦标签名称:{/dede:arclist}详解arclist简介标记简介:织梦常用标记,也称为自由列表标记,其中imglist、imginfolist、specart、coolart、auto

从一到无穷大 #15 Gorilla,论黄金26H与时序数据库缓存系统的可行性

本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可。本作品(李兆龙博文,由李兆龙创作),由李兆龙确认,转载请注明版权。引言缓存系统的高效存在前提,在满足前提的情况下可以接受缺陷便没有理由不引入缓存系统,但是具体影响因素需要仔细权衡,时序数据库只有常态极端场景下缓存有显著效果。时序数据库缓存系统

现场直击|亚数TrustAsia精彩亮相IOTE深圳物联网展,CSA联盟展台等你来!

2023年9月20日,IOTE2023第二十届深圳国际物联网展在深圳国际会展中心(宝安)顺利开幕。作为物联网领域年度最重要的行业盛会之一,本次展会汇聚全球来自工业、物流、基建、智慧城市、智慧零售等领域的600+企业、10万+行业人士,共同探索物联网发展的新方向。作为亚太地区首家具有全球可信CA资质的MatterNon-

微信小程序关键词排名优化:提升你的小程序可见性

随着智能手机的普及,许多企业和开发者都投入了大量的时间和资源来创建各种各样的应用,以满足用户的需求。而微信小程序则是一种快速兴起的应用类型,它们提供了轻量级的应用体验,无需下载即可使用。然而,要想让你的小程序脱颖而出,关键词排名优化是必不可少的。本文将深入探讨如何通过关键词排名优化来提升你的微信小程序的可见性和用户体验

Webshell 流量特征分析

前言:webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站

如何平滑升级 Nginx

Nginx详情:Nginx是一个流行的Web服务器和反向代理服务器。当需要升级Nginx时,可能会涉及到停止和启动服务,这将导致一段时间内网站不可用。为了避免这种情况,可以采用平滑升级的方法。以下是平滑升级Nginx的步骤:1.查看现有Nginx编译参数在终端输入以下命令查看当前Nginx的编译参数:/usr/loca

国内什么牌子的ipad手写笔好用?开学性价比触控笔

如今,苹果的Pencil系列无疑是iPad使用者的最佳选择。但这电容笔的售价实在是太高了,对于普通用户是买不起的。因此,在使用过程中,如何选用一款性能优良、价格低廉的电容笔是非常关键的。作为一个“苹果粉”,同时也是一个资深的数字发烧友,本人对电容笔也有一定的认识,下面就是我为大家准备的几款价格相对亲民的电容笔!一、电容

热文推荐