![轻量级Java EE企业应用开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/980/44509980/b_44509980.jpg)
2.3 理解POM
POM(Project Object Model,项目对象模型)是Maven中的基本工作单元。POM是一个XML文件,其中包含有关项目的信息以及Maven用于构建项目的详细配置信息。它包含大多数项目的默认值。比如在hello-world项目例子中,项目根目录下的pom.xml就是一个POM文件。当执行任务或目标时,Maven会在当前目录中查找POM文件,并读取POM文件,以获取所需的配置信息,然后执行目标。
可以在POM中指定的一些项目依赖项、插件或目标、构建配置文件等,也可以指定其他信息,例如项目版本、项目描述、开发人员姓名、邮件列表等。
2.3.1 Super POM
Super POM是Maven的默认POM。除非明确设置,否则所有POM都会扩展为Super POM,这意味着Super POM中指定的配置将由开发者自己创建的项目POM继承。Super POM位于Maven安装目录的/lib/maven-model-builder-x.x.x.jar文件中,解压该JAR文件可以在路径org/apache/maven/model/下看到一个pom-4.0.0.xml文件,该pom-4.0.0.xml文件就是Super POM。下面的代码片段是Super POM的核心内容。
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P57_78787.jpg?sign=1738904498-rpKcb58x7IJ9tmDuDnFpT4DV8VHrXXlu-0-743a7bf75113003764f89827b6687ed6)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P58_78788.jpg?sign=1738904498-BUVy1d3ahTQDAtiTQXZ35sKfozvAGnhx-0-013c734df4f2446457b860d0084941c4)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P59_78789.jpg?sign=1738904498-BXzgRuLNBd9nAESCrWS3CwYmFXLWQA44-0-ec56e41d3203c98f92b9bf2d197593b0)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P60_78790.jpg?sign=1738904498-eJRaZjNO1zy70X7Sm85PwPzqyUlZS1WU-0-6247de6a30d93691cc1b6742b6088267)
从上述配置文件我们能够理解为什么hello-world项目的main目录下就是平时开发的功能代码,而test下则放置的是测试代码。
2.3.2 最小化POM
POM的最低要求如下:
- project
- modelVersion
- groupId
- artifactId
- version
以下是一个例子:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P60_78791.jpg?sign=1738904498-GZiqTpKXu3Ph9nUdQUgxvkDdNjqGQMS6-0-dcb5ebe1aa3e7eee1de4f7087ae03b2a)
一个POM要求配置其groupId、artifactId和version,这3个值构成项目的完全限定工件名称,即<groupId>:<artifactId>:<version>的形式。对于上面的示例,其完全限定的工件名称为“com.waylau.java:hello-world:1.0-SNAPSHOT”。
若POM未指定详细配置信息,则Maven将使用其默认值。这些默认值之一是包装类型,每个Maven项目都有包装类型,如果未在POM中指定,那么将使用默认值jar。
此外,可以看到在最小POM中未指定存储库。如果使用最小的POM构建项目,那么它将继承Super POM中的存储库配置。因此,当Maven在最小POM中看到依赖项时,它将知道这些依赖项将从Super POM中指定的https://repo.maven.apache.org/maven2下载。这也体现出了Maven提倡的“约定优于配置”(Convention Over Configuration)的核心理念。