详解 Maven POM(项目对象模型)
什么是 Maven POM?
Maven POM,即 Project Object Model,是 Maven 中的项目对象模型,它是 Maven 中的基础概念之一,对 Maven 做任何的配置都需要使用到 POM,POM 是 Maven 进行构建时的核心之一。POM 文件会定义项目的基本信息,包括但不限于:
- 项目组信息
- 框架版本信息
- 依赖的 jar 包信息
- 构建的配置信息,如打包方式等
- 插件的配置信息
- …
因此我们可以说,POM 是 Maven 项目的全局配置文件。
POM 的基本结构
我们来看看 POM 的基本结构,一个 POM 文件是一个 XML 文件,用于描述一个 Maven 项目,由三部分组成:
- 项目简介(introduction)
- 项目依赖(dependencies)
- 构建说明(build)
POM 的结构如下:
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 项目基本信息,包括 but not limited to:项目名称,版本信息, -->
<modelVersion>4.0.0</modelVersion>
<groupId>group-id</groupId>
<artifactId>artifact-id</artifactId>
<version>1.0.0</version>
<!-- 项目依赖 -->
<dependencies>
<!-- ... -->
</dependencies>
<!-- 构建说明,包括 but not limited to:源代码目录,Jar 包名称和类型 -->
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<!-- ... -->
</plugins>
</build>
</project>
POM 机制的工作流程
Maven 在运行时会加载 POM 文件,POM 文件的默认文件名是 pom.xml,如果该文件不存在则会跳过该项目。Maven 在加载 POM 文件时会自动创建一个名为 ProjectBuildingRequest 的对象,用于将项目加载到内存中,此时的 POM 文件仅仅是描述了项目模型,不会执行任何操作。当 Maven 开始构建项目时,它会根据定义在 POM 中的数据进行统一配置,如依赖的 JAR 文件、编译选项等,之后按照配置信息对项目进行编译、测试、打包,最后输出为元数据文件或可执行文件,具体的构建执行过程在 Build 阶段中执行。
示例
我们将使用两个示例来演示 POM 文件的具体使用。
示例 1:Spring Boot 应用
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spring-boot-app</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 添加 Spring Boot Starter Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/>
</parent>
<!-- 引入 Spring Boot Starter Web 依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.3.RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- ... -->
</dependencies>
<!-- 配置 Maven 打包方式 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
该示例是一个使用 Spring Boot 构建的 Web 应用程序的 POM 文件示例。在示例中,我们使用 spring-boot-starter-parent
作为父项目。spring-boot-starter-parent
是一个特殊的 Starter,它具有管理依赖和插件版本的功能。在 dependencies
部分,我们添加了对 Spring Boot Web Starter 的依赖,以便将 Web 框架引入我们的应用程序。在 build
部分,我们使用 spring-boot-maven-plugin
为我们的项目生成一个可执行的 Jar 包。
示例 2:Java 项目
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>java-project</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 配置依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
该示例是一个简单的 Java 项目的 POM 示例。在示例中,我们添加了对 JUnit 4 的依赖,该依赖仅在测试资源中使用。这是一种优化依赖的策略,可以减轻一些不必要的开销。其它的配置项都与示例一相同。
希望这篇文章能够解答你对 Maven POM 的疑惑。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Maven POM(项目对象模型) - Python技术站