一.什么是pom

pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

二.内容注解

1 <!-- 当前POM模型的版本 -->
  2 <modelVersion>4.0.0</modelVersion>
  3 
  4 <!-- 父项目坐标 -->
  5 <parent>
  6   <groupId>项目组织唯一的标识符(com.xxx)</groupId>
  7   <artifactId>项目的唯一的标识符(项目名称)</artifactId>
  8   <version>版本号</version>
  9   <!--父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->  
 10    <relativePath></relativePath>  
 11 </parent>
 12 
 13 
 14 <!-- 项目坐标 -->
 15 <groupId>项目组织唯一的标识符(com.xxx)</groupId>
 16 <artifactId>项目的唯一的标识符((项目名称))</artifactId>
 17 <packaging>打包类型</packaging>
 18 <version>版本号</version>
 19 
 20 <!-- 项目信息 -->
 21 <name>名称</name> 
 22 <description>描述</description>
 23 <url>网址</url>
 24 <inceptionYear>工程的初始时间</inceptionYear>
 25 
 26 <!-- 属性 -->
 27 <properties>
 28   <!-- 定义一些常量 -->
 29   <jdk.version>1.7</jdk.version>
 30   <servlet.api.version>3.0.1</servlet.api.version>
 31   <jsp.api.version>2.1</jsp.api.version>
 32   <junit.version>4.11</junit.version>
 33   <mysql.version>5.1.21</mysql.version>
 34   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 35 </properties>
 36 
 37 <!-- 依赖管理,父项目中用来统一管理依赖的,子项目中直接使用dependencies -->
 38 <dependencyManagement>
 39   <dependencies>
 40     <dependency>
 41       <groupId>javax.servlet</groupId>
 42       <artifactId>javax.servlet.api</artifactId>
 43       <version>3.0.1</version>
 44       <scope>provided</scope>
 45     </dependency>
 46   </dependencies>
 47 </dependencyManagement>
 48 
 49 <!-- 依赖项 -->
 50 <dependencies>
 51   <dependency>
 52     <groupId>javax.servlet</groupId>
 53     <artifactId>javax.servlet.api</artifactId>
 54     <version>3.0.1</version>
 55     <scope>provided</scope>
 56   </dependency>
 57 </dependencies>
 58 
 59 <!--构建项目需要的信息--> 
 60 <build>
 61   <!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->  
 62   <sourceDirectory></sourceDirectory>  
 63   <!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。--> 
 64   <scriptSourceDirectory></scriptSourceDirectory>
 65   <!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。--> 
 66   <testSourceDirectory></testSourceDirectory>
 67   <!--被编译过的应用程序class文件存放的目录。-->
 68   <outputDirectory></outputDirectory>
 69   <!--被编译过的测试class文件存放的目录。-->  
 70   <testOutputDirectory></testOutputDirectory>
 71   <!--使用来自该项目的一系列构建扩展-->  
 72   <extensions>
 73     <!--描述使用到的构建扩展。--> 
 74     <extension>
 75       <!--构建扩展的groupId-->
 76       <groupId></groupId>
 77       <!--构建扩展的artifactId-->
 78       <artifactId></artifactId>
 79       <!--构建扩展的版本-->
 80       <version></version>
 81     </extension>
 82   </extensions>
 83 
 84   <!--当项目没有规定目标(Maven2 叫做阶段)时的默认值-->  
 85   <defaultGoal></defaultGoal> 
 86 
 87   <!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。--> 
 88   <resources>
 89     <!--这个元素描述了项目相关或测试相关的所有资源路径-->
 90     <resource>
 91       <!--描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven/messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。-->  
 92       <targetPath></targetPath> 
 93       <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。-->  
 94       <filtering></filtering>
 95       <!--描述存放资源的目录,该路径相对POM路径-->
 96       <directory></directory>
 97       <!--包含的模式列表,例如**/*.xml.--> 
 98       <includes></includes>
 99       <!--排除的模式列表,例如**/*.xml-->
100       <excludes></excludes>     
101     </resource>
102   </resources> 
103 
104   <!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。-->
105   <testResources> 
106     <!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明-->  
107     <testResource>
108       <targetPath></targetPath>
109       <filtering></filtering>
110       <directory></directory>
111       <includes></includes>
112       <excludes></excludes>
113     </testResource>
114   </testResources> 
115 
116   <!--构建产生的所有文件存放的目录-->
117   <directory></directory>
118   <!--产生的构件的文件名,默认值是${artifactId}-${version}。-->
119   <finalName></finalName>
120   <!--当filtering开关打开时,使用到的过滤器属性文件列表-->
121   <filters></filters>
122 
123   <!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置--> 
124   <pluginManagement>
125     <!--使用的插件列表 。-->
126     <plugins>
127       <!--plugin元素包含描述插件所需要的信息。-->  
128       <plugin>
129         <!--插件在仓库里的group ID-->
130         <groupId/>
131         <!--插件在仓库里的artifact ID--> 
132         <artifactId/>
133         <!--被使用的插件的版本(或版本范围)-->  
134         <version/> 
135         <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->
136         <extensions/>  
137         <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->           <executions>
138           <!--execution元素包含了插件执行需要的信息-->  
139           <execution>            
140             <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->
141              <id/>
142              <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->
143              <phase/> 
144              <!--配置的执行目标-->
145              <goals/>
146              <!--配置是否被传播到子POM-->  
147              <inherited/> 
148              <!--作为DOM对象的配置-->
149              <configuration/>
150           </execution>
151         </executions>
152 
153         <!--项目引入插件所需要的额外依赖--> 
154         <dependencies>
155           <!--参见dependencies/dependency元素-->
156           <dependency> 
157           </dependency> 
158         </dependencies>
159 
160         <!--任何配置是否被传播到子项目-->  
161         <inherited/>
162         <!--作为DOM对象的配置-->
163         <configuration/>
164       </plugin>
165     </plugins>
166   </pluginManagement>
167 
168   <!--使用的插件列表--> 
169   <plugins>
170     <!--参见build/pluginManagement/plugins/plugin元素--> 
171     <plugin> 
172       <groupId/><artifactId/><version/><extensions/>
173       <executions>
174         <execution>
175           <id/><phase/><goals/><inherited/><configuration/> 
176         </execution>
177       </executions>
178       <dependencies>
179         <!--参见dependencies/dependency元素-->
180         <dependency>
181         </dependency>
182       </dependencies>
183       <goals/><inherited/><configuration/>
184     </plugin> 
185   </plugins>
186 </build>
187 
188 <licenses>证书列表</licenses>
189 
190 <!--描述项目所属组织的各种属性。Maven产生的文档用--> 
191 <organization>
192   <!--组织的全名-->  
193   <name></name>     
194   <!--组织主页的URL-->  
195   <url></url> 
196 </organization>
197 
198 <!--项目开发者列表-->  
199 <developers>
200   <!--某个项目开发者的信息-->
201   <developer>
202     <!--SCM里项目开发者的唯一标识符-->
203     <id></id>
204     <!--项目开发者的全名-->  
205     <name></name>
206     <!--项目开发者的email--> 
207     <email></email>
208     <!--项目开发者的主页的URL-->  
209     <url></url>
210 
211     <!--项目开发者在项目中扮演的角色,角色元素描述了各种角色-->
212     <roles> 
213       <role></role>
214       <role></role> 
215     </roles>
216     
217     <!--项目开发者所属组织-->
218     <organization></organization>
219     <!--项目开发者所属组织的URL-->
220     <organizationUrl></organizationUrl> 
221     <!--项目开发者属性,如即时消息如何处理等--> 
222     <properties>
223       <dept></dept> 
224     </properties>
225 
226     <!--项目开发者所在时区, -11到12范围内的整数。--> 
227     <timezone></timezone>
228   </developer>
229 </developers>
230 
231 <!--项目的其他贡献者列表--> 
232 <contributors>
233   <!--项目的其他贡献者。参见developers/developer元素-->
234   <contributor>
235   </contributor>
236 </contributors>