Spring Boot学习(二):POM.xml文件与spring-boot-starter-parent解析

POM.xml

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置:

项目依赖
插件
执行目标
项目构建 profile
项目版本
项目开发者列表
相关邮件列表信息


POM.xml解析

以下是我的pom.xml文件和解析

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 --> 
    <modelVersion>4.0.0</modelVersion>


<!-- 继承的父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>

<!-- relativePath:为可选项,maven会首先搜索该地址,然后再搜索远程仓库。-->
        <relativePath/> <!-- lookup parent from repository 从存储库中查找父类 -->
    </parent>

 <!-- 项目组织的唯一标识符 :对应JAVA的包的结构,是main目录里java的目录结构-->
    <groupId>com.example</groupId>

 <!-- 项目的标识,通常就是项目的名称,groupId 和 artifactId 一起定义了 项目在仓库中的位置-->
    <artifactId>demo</artifactId>

<!-- 项目版本号-->
    <version>0.0.1-SNAPSHOT</version>

<!-- 项目名-->
    <name>demo</name>

    <!-- 项目的描述, Maven 产生的文档用 -->
    <description>Demo project for Spring Boot</description>

<!-- POM文件常量定义区,在文件中可以直接引用,如版本、编码等。使用方式${java.version}-->
    <properties>
        <java.version>1.10</java.version>
    </properties>

 <!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。-->
    <dependencies>

<!--dependency该元素表示单个依赖,里面的是依赖的信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>

            <!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传      递性。 -->
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>

  <!-- scope:用来指定当前包的依赖范围

compile(编译范围),是默认的范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围),只有在当JDK或者一个容器已提供该依赖之后才使用。
runtime(运行时范围),在运行和测试系统的时候需要。
test(测试范围),在一般的 编译和运行时都不需要。
system(系统范围),与provided类似
 -->
            <scope>test</scope>

            <!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 -->
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

<!--构建项目的信息 -->
    <build>
    <!--构建工具插件管理-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


spring-boot-starter-parent

我们可以看到,一个maven类型的Spring Boot项目默认的父依赖是spring-boot-starter-parent,那spring-boot-starter-parent是什么,有什么用呢?

spring-boot-starter-parent其实就是spring boot自己配置的一个初始依赖,主要是替我们配置了依赖的版本号信息和一些其他基础配置,Spring Boot项目并不一定需要继承spring-boot-starter-parent。

spring-boot-starter-parent 的基本功能有

1、定义了 Java 编译版本为 1.8 。

2、使用 UTF-8 格式编码。

3、继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。

4、执行打包操作的配置。

5、自动化的资源过滤。

6、自动化的插件配置。

7、针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

简单来说,spring-boot-dependencies最主要的作用就是帮我们定义好了一些配置(如依赖的版本号,JDK版本等),其中版本的依赖在 spring-boot-dependencies的父项目spring-boot-dependencies中定义

你可能感兴趣的:(springboot,java,spring,boot,maven)