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中定义