文章目录
1. 重新认识pom文件
我们都知道,Maven
是一款项目构建管理和依赖管理的工具,但事实上这只是 Maven
的一部分功能,Maven
本身的产品定位是一款项目管理工具。
下面是 spring-boot-starter
的 POM
文件,可以看到:除了熟悉的GAV
坐标标签、dependencies
标签,还有 description
、url
、organization
、licenses
、developers
、scm
、issueManagement
等这些描述项目信息的标签。
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.6</version>
<name>spring-boot-starter</name>
<description>Core starter, including auto-configuration support, logging and YAML</description>
<url>https://spring.io/projects/spring-boot</url>
<organization>
<name>Pivotal Software, Inc.</name>
<url>https://spring.io</url>
</organization>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<developers>
<developer>
<name>Pivotal</name>
<email>info@pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:git://github.com/spring-projects/spring-boot.git</connection>
<developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git</developerConnection>
<url>https://github.com/spring-projects/spring-boot</url>
</scm>
<issueManagement>
<system>GitHub</system>
<url>https://github.com/spring-projects/spring-boot/issues</url>
</issueManagement>
<dependencies>
<dependency>
……
</dependency>
</dependencies>
</project>
从项目管理的角度来看,Maven
提供了如下这些功能:
- 项目对象模型(
POM
):将整个项目本身抽象、封装为应用程序中的一个对象,以便于管理和操作。 - 全局性构建逻辑重用:
Maven
对整个构建过程进行封装之后,程序员只需要指定配置信息即可完成构建。 - 构件的标准集合:在
Maven
提供的标准框架体系内,所有的构件都可以按照统一的规范生成和使用。 - 构件关系定义:
Maven
定义了构件之间的三种基本关系,让大型应用系统可以使用Maven
来进行管理- 继承关系:通过从上到下的继承关系,将各个子构件中的重复信息提取到父构件中统一管理
- 聚合关系:将多个构件聚合为一个整体,便于统一操作
- 依赖关系:
Maven
定义了依赖的范围、依赖的传递、依赖的排除、版本仲裁机制等一系列规范和标准,让大型项目可以有序容纳数百甚至更多依赖
- 插件目标系统:
Maven
核心程序定义抽象的生命周期,然后将插件的目标绑定到生命周期中的特定阶段,实现了标准和具体实现解耦合,让Maven
程序极具扩展性 - 项目描述信息的维护:我们不仅可以在
POM
中声明项目描述信息,更可以将整个项目相关信息收集起来生成 HTML 页面组成的一个可以直接访问的站点。这些项目描述信息包括:- 公司或组织信息
- 项目许可证
- 开发成员信息
i