以下引用自官方的POM介绍:
一、什么是POM?
项目对象模型或POM是Maven的基本工作单元。它是一个XML文件,其中包含有关Maven用于构建项目的项目和配置详细信息。它包含大多数项目的默认值。示例是构建目录,即target;这是源目录src/main/java;测试源目录src/test/java;等等。
POM已从Maven 1中的project.xml重命名为Maven 2中的pom.xml。而不是具有包含可执行目标的maven.xml文件,目标或插件现在已在pom.xml中配置。执行任务或目标时,Maven会在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。
可以在POM中指定的一些配置是项目依赖性,可执行的插件或目标,构建配置文件等。还可以指定其他信息,如项目版本,描述,开发人员,邮件列表等。
二、超级POM
超级POM是Maven的默认POM。所有POM扩展超级POM,除非明确设置,这意味着超级POM中指定的配置由您为项目创建的POM继承。下面的代码片段是Maven 2.0.x的超级POM。
12 4.0.0 3Maven Default Project 4 56 16 177 15central 8Maven Repository Switchboard 9default 10http://repo1.maven.org/maven2 1112 14false 1318 31 3219 30central 20Maven Plugin Repository 21http://repo1.maven.org/maven2 22default 2324 26false 2527 29never 2833 51 52target 34target/classes 35${artifactId}-${version} 36target/test-classes 37src/main/java 38src/main/scripts 39src/test/java 4041 4542 44src/main/resources 4346 5047 49src/test/resources 4853 55 56target/site 5457 109 11058 108release-profile 59 6061 65 6662 64performRelease 6367 10768 10669 82true 70org.apache.maven.plugins 71maven-source-plugin 72 7374 8175 80attach-sources 7677 79jar 7883 96true 84org.apache.maven.plugins 85maven-javadoc-plugin 86 8788 9589 94attach-javadocs 9091 93jar 9297 105true 98org.apache.maven.plugins 99maven-deploy-plugin 100 101102 104true 103
下面的代码片段是Maven 2.1.x的超级POM。
12 4.0.0 3Maven Default Project 4 56 16 177 15central 8Maven Repository Switchboard 9default 10http://repo1.maven.org/maven2 1112 14false 1318 31 3219 30central 20Maven Plugin Repository 21http://repo1.maven.org/maven2 22default 2324 26false 2527 29never 2833 132 133${project.basedir}/target 34${project.build.directory}/classes 35${project.artifactId}-${project.version} 36${project.build.directory}/test-classes 37${project.basedir}/src/main/java 38 39src/main/scripts 40${project.basedir}/src/test/java 4142 4643 45${project.basedir}/src/main/resources 4447 5148 50${project.basedir}/src/test/resources 4952 13153 13054 57maven-antrun-plugin 551.3 5658 61maven-assembly-plugin 592.2-beta-2 6062 65maven-clean-plugin 632.2 6466 69maven-compiler-plugin 672.0.2 6870 73maven-dependency-plugin 712.0 7274 77maven-deploy-plugin 752.4 7678 81maven-ear-plugin 792.3.1 8082 85maven-ejb-plugin 832.1 8486 89maven-install-plugin 872.2 8890 93maven-jar-plugin 912.2 9294 97maven-javadoc-plugin 952.5 9698 101maven-plugin-plugin 992.4.3 100102 105maven-rar-plugin 1032.2 104106 109maven-release-plugin 1072.0-beta-8 108110 113maven-resources-plugin 1112.3 112114 117maven-site-plugin 1152.0-beta-7 116118 121maven-source-plugin 1192.0.4 120122 125maven-surefire-plugin 1232.4.3 124126 129maven-war-plugin 1272.1-alpha-2 128134 136${project.build.directory}/site 135137 187 188138 186release-profile 139 140141 146 147142 145performRelease 143true 144148 185149 184150 162true 151org.apache.maven.plugins 152maven-source-plugin 153154 161155 160attach-sources 156157 159jar 158163 175true 164org.apache.maven.plugins 165maven-javadoc-plugin 166167 174168 173attach-javadocs 169170 172jar 171176 183true 177org.apache.maven.plugins 178maven-deploy-plugin 179180 182true 181
三、最小的POM要求
POM的最低要求如下:
- project root - 项目根
- modelVersion - 应设置为4.0.0
- groupId - 项目组的ID。(理解为包名)
- artifactId - 工件的ID(项目)
- version - 指定组下的工件的版本
以下是一个例子:
4.0.0 com.mycompany.app my-app 1
POM要求配置其groupId,artifactId和version。这三个值形成项目的完全合格的工件名称。这是以<groupId>:<artifactId>:<version>的形式。对于上面的示例,其完全限定的工件名称为“com.mycompany.app:my-app:1”。
此外,如上所提到的什么是POM,如果没有指定的配置细节,Maven将使用默认值。这些默认值之一是打包类型。每个Maven项目都有一个打包类型。如果在POM中没有指定,那么将使用默认值“jar”。
此外,你可以看到,在最小POM,在库中未指定。如果您使用最小POM构建项目,它将继承超级POM中的存储库配置。因此,当看到Maven的在最小POM的依赖关系,它会知道这些依赖关系将在这里(这是在超级POM中指定)被下载。
总结:
1、pom.xml文件是Maven构建的基础,而一个标准的pom.xml文件中,最基本是由groupId、artifactId、version这三个字段组成;在创建pom.xml之后,必须确定这三个属性,因为这三个属性在项目仓库是作为唯一标识的。
2、而对于三个属性的基本理解如下:
groupId:命名空间,比如com.jsoft.test
artivactId:项目名称,比如testproject
version:版本号,比如1.0
3、以下为标准的pom.xml包含的字段:
4.0.0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
提示:更详细的说明,参考官方解释:
4、还有一个重要的点,一般项目分模块进行开发,那么在pom.xml中也有体现,比如一个总的pom.xml管理这每一个模块的pom.xml,这种做法叫做分模块。
以上参考: