项目对象模型 (POM) 是 Maven 中的基本工作单元。它是一个 XML 文件,包含有关项目的信息以及 Maven 用于构建项目的配置详细信息。它包含大多数项目的默认值。例如,构建目录为target;源目录为src/main/java;测试源目录为src/test/java;等等。执行任务或目标时,Maven 在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
POM.xml最简示例
1 2 3 4 5 6 7
| <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </project>
|
POM.xml结构
项目基本信息
必填项标签:
- groupId:项目的组名,通常为反转的域名,例如:com.example
- artifactId: 项目的唯一标识,通常为项目名称
- version:项目版本号
- packaging:项目打包方式,通常是 jar、war 或 pom, 如果没有指定packaging,则默认是 jar
其他重要标签:
modules 标签用于声明当前 Maven 项目包含的模块子项目,每个子项目都是一个独立的 Maven 项目,具有自己的 pom.xml 文件,可以进行独立构建和测试。在父项目的 pom.xml 文件中,使用 标签来列出所有子项目的名称。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <project> <modelVersion>4.0.0</modelVersion> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.8.7</version>
<modules> <module>ruoyi-admin</module> <module>ruoyi-framework</module> <module>ruoyi-system</module> <module>ruoyi-quartz</module> <module>ruoyi-generator</module> <module>ruoyi-common</module> </modules> </project>
|
parent 标签用于声明当前 Maven 项目的父项目,它可以将若干个 Maven 项目组织成一个整体,指定版本号,插件版本号等,便于管理和维护,在一个 Maven 项目中,使用标签来引用父项目。
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="UTF-8"?> <project> <parent> <artifactId>ruoyi</artifactId> <groupId>com.ruoyi</groupId> <version>3.8.7</version> </parent> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-framework</artifactId> </project>
|
properties 严格来说,并不一定是项目本身的信息,而是人为设置的属性或者说宏,这个标签用来定义和管理项目中所需要的属性,其作用有以下几个:
(1) 统一管理项目中的常用属性,比如版本号、路径、插件版本等,方便统一修改和管理。
(2) 可以在配置过程中使用 ${…}占位符引用这些属性,使得配置更加灵活和便捷。
(3) 避免硬编码,提高代码的可维护性和可读性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <project> <properties> <ruoyi.version>3.8.7</ruoyi.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <spring-framework.version>5.3.33</spring-framework.version> <druid.version>1.2.20</druid.version> <bitwalker.version>1.21</bitwalker.version> <swagger.version>3.0.0</swagger.version> <kaptcha.version>2.3.3</kaptcha.version> <pagehelper.boot.version>1.4.7</pagehelper.boot.version> <fastjson.version>2.0.43</fastjson.version> <oshi.version>6.5.0</oshi.version> <commons.io.version>2.13.0</commons.io.version> <poi.version>4.1.2</poi.version> <velocity.version>2.3</velocity.version> <jwt.version>0.9.1</jwt.version> </properties> </project>
|
项目的依赖列表
dependency
与项目的依赖列表相关的标签最外层由 dependencies 来囊括,内部包含了各种具体的依赖 dependency,该标签用于指定一个依赖项,它包含以下几个子标签:
- groupId:指定依赖项的groupId,项目的组名
- artifactId:指定依赖项的artifactId,项目的唯一标识符
- version:指定依赖项的版本号。
- scope:指定依赖项在项目中的使用范围。
其中的 一般包含以下几种范围:常用的有compile、test、provided 和 runtime。
repository
我们还能在pom文件中支持指定Maven仓库,即使用 repositories 和 repository 标签,repository 用于指定一个Maven仓库。
项目的构建配置
项目的构建配置信息,包括编译器版本、插件列表、源代码目录等。
具体请参考:
参考链接
- 全面详解Maven的配置文件pom.xml(含常用plugin),by Slow菜鸟.
- Introduction to the POM,by apache.
- Maven的三种项目打包方式——pom,jar,war的区别,by Mr.史.
- 基于Springboot的maven父子工程pom文件打包配置,by Sherlock先生.
- Maven 仓库,by runoob.
- maven配置阿里云镜像源,by aliyun.