一.什么是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>