关于maven中pom.xml核心文件的详细介绍,5000字深度解析。
文章目录
前言
pom.xml是maven项目中的核心配置文件,其POM这一名称来源于项目对象模型(Project Object Model, POM)。POM包含了项目的各种配置信息,如项目名称、版本号、依赖关系、构建配置、插件、目标平台等。基于pom.xml,我们可以轻松对项目的构建和依赖关系进行管理,让我们能够更专注于业务逻辑的开发。
pom文件中包含多种元素:模型版本、项目基本信息、属性、依赖管理、构建配置、父POM和模块等。下面就这些常用的pom配置项进行详细介绍。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pom.xml总体结构
先来看一下简单的pom.xml文件结构,其中包含了多种常见的配置项:
<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">
<!-- 指定POM模型的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目基本信息 -->
<groupId>com.example</groupId> <!-- 项目的组ID,通常是公司的域名反转 -->
<artifactId>my-project</artifactId> <!-- 项目的唯一标识符,在组ID内必须是唯一的 -->
<version>1.0-SNAPSHOT</version> <!-- 项目的版本,SNAPSHOT表示这是一个快照版本 -->
<packaging>jar</packaging> <!-- 项目的打包方式,这里是jar包 -->
<!-- 自定义属性 -->
<properties>
<jdk.version>1.8</jdk.version><!-- 编译时使用的Java版本 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 项目的编码格式 -->
<maven.compiler.source>1.8</maven.compiler.source> <!-- 源码编译版本 -->
<maven.compiler.target>1.8</maven.compiler.target> <!-- 目标编译版本 -->
</properties>
<!-- 项目的依赖 -->
<dependencies>
<!-- JUnit测试框架的依赖 -->
<dependency>
<groupId>junit</groupId> <!-- 依赖的组ID -->
<artifactId>junit</artifactId> <!-- 依赖的artifactID -->
<version>4.13.2</version> <!-- 依赖的版本号 -->
<scope>test</scope> <!-- 依赖的作用域,这里是test,表示这个依赖只在测试时有效 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 项目的构建配置 -->
<build>
<!-- 项目源代码目录 -->
<sourceDirectory>src/main/java</sourceDirectory>
<!-- 项目资源目录 -->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<!-- 配置构建过程中使用的插件 -->
<plugins>
<!-- Maven编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- 插件的配置信息 -->
<source>${maven.compiler.source}</source> <!-- 源码编译版本 -->
<target>${maven.compiler.target}</target> <!-- 目标编译版本 -->
</configuration>
</plugin>
<!-- Maven JAR插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>
</project>
二、pom常用配置项介绍
1.modelVersion
<modelVersion>4.0.0</modelVersion>
<modelVersion>
模型版本指定了当前 POM 使用的 Maven 模型版本。对于 Maven 2 和 Maven 3,版本号通常是 4.0.0。
2.项目基本信息
项目基本信息包含很多配置标签,其中一些为必填项:
groupId
: 项目的组ID,在一个组织或者项目中通常是唯一的,定义了项目所属的实际组织的唯一标识符,通常是公司域名的反转。
artifactId
:项目的基本名称,通常是项目的模块名或 JAR 文件的名称,是项目的唯一标识符。
version
:项目的版本号。
packaging
:项目的打包方式,如 JAR、WAR、EAR 等,默认为 JAR。
3.properties
<properties>
元素可以定义一组可以在整个 POM 中使用的变量,方便统一管理项目中版本号、路径、插件版本等常用属性。在使用时使用 ${…}占位符引用这些属性。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
4 .parent
parent
标签用于指定当前项目的父项目。通过继承父 POM,一个POM文件可以继承另一个POM文件的配置。
<project>
<artifactId>my-project</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.example.parent</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
</parent>
</project>
上述代码声明了当前项目my-project的父项目为parent-project,在子项目中可以不必声明groupId和version,二者均会继承自 parent-project。
5.module
通常用于父项目的POM文件中,用于声明当前项目所包含的多模块项目的子模块。通过modules元素,一个POM文件可以管理多个子模块:
<modules>
<module>module1</module>
<module>module2</module>
</modules>
上述代码中,当前项目包含module1
和module2
两个子项目,每个子项目都是一个独立的 Maven 项目,具有自己的 pom.xml 文件,可以进行独立构建和测试,但是拥有和父项目相同的groupId
和version
。
6.dependency
6.1 依赖标签
<dependencies>
元素内可以包含多个 <dependency>
元素,每个 <dependency>
元素定义了项目的一个依赖。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在标签<dependency>
中还包含groupId
、artifactId
和version
等标签,其含义则对应了依赖项目的组名称、项目名称和版本号。
除此之外,还有一个重要的标签<scope>
。<scope>
一般包含以下几种范围:
6.2 scope范围
- compile(编译范围):
- 默认的依赖范围,表示依赖在编译、测试和运行阶段都有效。
- 该类依赖会被打包进最终的发布包里
- provided(已提供范围):
- 表示依赖在编译和测试阶段有效,但在运行时不需要,因为容器或 JDK已经提供了这些依赖。
- 典型的例子是servlet-api和jsp-api,对于web应用,这些API由Servlet容器(如Tomcat)提供。
- 该类依赖不会被打包进最终的发布包中。
- runtime(运行时范围):
- 表示依赖在测试和运行时阶段有效,但在编译主代码时不需要。
- 典型的例子是JDBC驱动实现,在编译时只需要JDBC API,但在运行时需要具体的JDBC驱动。
- 该类依赖会被打包进最终的发布包中。
- test(测试范围):
- 表示依赖仅在测试阶段有效,用于编译和运行测试代码。
- 该类依赖不会被打包进最终的发布包中。
- import(导入范围):
- 它只用在
<dependencyManagement>
中,表示导入POM中的<dependencyManagement>
部分到当前POM中。 - 它不会导入任何实际的依赖,只是允许你使用在另一个POM中定义的
<dependencyManagement>
7.build
<build>
元素包含了与构建过程相关的配置信息,包括项目的构建配置,包括源代码目录、资源目录、插件等。
<plugins>
:定义了构建过程中使用的插件及其配置,主要用于扩展 Maven 的功能,帮助开发人员更方便地构建、打包、发布项目。<resources>
:定义了项目中资源文件的配置,如源代码文件之外的配置文件。<finalName>
:定义了构建后生成文件的名称。
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
总结
pom.xml 文件是 Maven 项目的心脏,它包含了项目的配置信息,Maven 通过读取这个文件来了解项目的依赖、构建插件、目标平台等,从而完成项目的构建、打包、发布等任务。