本文转载自http://blog.csdn.net/zhuxinhua/article/details/5788546
快速察看
<project> <modelVersion>4.0.0</modelVersion> <!--maven2.0必须是这样写,现在是maven2唯一支持的版本--> <!-- 基础设置 --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <name>...</name> <url>...</url> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!--构建设置 --> <build>...</build> <reporting>...</reporting> <!-- 更多项目信息 --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- 环境设置--> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
基本内容:
pom包括了所有的项目信息
groupId:项目或组织的唯一标识,并且配置时生成路径也是由此生成。如org.myproject.mojo生成的相对路径为:/org/myproject/mojo
artifactId:项目的通用名称
version:项目的版本
packaging:打包机制。例如pom,jar,maven-plugin,ejb,war,ear,rar,par
name:用户描述项目的名称,无关紧要的东西,可选。
url:应该是只写明开发团队的网站,无关紧要,可选。
classifer:分类,可选。
其中,groupId+artifactId+version+packaging组成了项目的唯一坐标,一般情况下,前面三个就可以组成唯一坐标。
POM关系:主要为依赖、继承、合成。
dependency属性介绍
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.1</version> </dependency>
type:表示组件的类型,默认为jar。
scope:表示当前组件的依赖范围。
optional:设置依赖是否可选,默认false,子项目默认都继承。如果设置为true,子项目必须显示引入。与dependencyManagement里定义的依赖类似。
exclusions:如果X需要A,A包含B依赖,则可以用此属性声明exclusion。
exclusion:将B从依赖树中删除。
如上图中的三个属性为必要属性。
groupId+artifactId+version组成了该组件在maven仓库里的准确路径。假如仓库路径为D:apache-maven-3.5.0 epository。则如上配置后,对应的文件位置应该在D:apache-maven-3.5.0 epositoryorgapachecommonscommons-lang33.1文件夹下。
如果一个工程是parent或aggregation(即mutil-module的),则packaging必须设置为pom。
子工程从父工程继承的包括:dependencies,developers,contributors,plugin lists,reports lists,plugin execution with matching ids,plugin configuration
一个maven项目想要继承另一个maven项目,可以在pom.xml文件中做如下配置
<parent> <groupId>org.codehaus.mojo</groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <relativePath>../my-parent</relativePath> </parent>
其中relativePath属性是可选的,maven在搜索本地仓库之前会优先搜索这个地址。上面其余三个属性可以唯一确定一个父工程。
dependencyManagement:用来帮助管理children的dependencies。
<dependencyManagement> <dependencies> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> </dependencies> </dependencyManagement>
如上图在父工程中定义后,子工程只能引用groupId和artifactId,version则由父工程控制。
这样做的优点是可以集中管理依赖的详情。
modules:父工程(或聚合工程)表现它有哪些子模块。顺序是不重要的,maven会根据依赖关系来拓扑排序
<modules> <module>e3.manager-dao</module> <module>e3.manager-interface</module> <module>e3.manager-pojo</module> <module>e3.manager-service</module> <module>e3.manager-web</module> </modules>
properties:为pom定义一些常量,在pom的其他地方可以直接引用。
<properties> <junit.version>4.12</junit.version> </properties>
使用方式:${junit.version}
也可以获取pom里定义的其他属性,如${project.version} 获取项目版本。如${project.artifactId} 获取项目名。
build以下属性:
finalName:指定去掉后缀的工程名。${project.artifactId}
directory:指定build target目标的目录,默认为根目录下的target
filters:定义指定filter属性的位置。
<filters> <filter>src/main/filters/filter-${env}.properties</filter> </filters>
resource:描述工程中资源的位置。
<resource> <targetPath>META-INF/plexus</targetPath> <filtering>false</filtering> <directory>${basedir}/src/main/plexus</directory> <includes> <include>configuration.xml</include> </includes> <excludes> <exclude>**/*.properties</exclude> </excludes> </resource>
其中:targetPath指定build资源到哪个目录。
filtering:指定filter文件值在这个resource中是否有效。例如这里指定的是在configuration.xml文件中无效。
directory:指定属性文件的目录,build过程需要找到它,并将其放到targetPath目录下。默认的directory是src/main/resources
includes:指定包含文件的patterns,符合样式,并且在directory目录下的文件,将会包含进project的资源文件。
excludes:指定不包含在内的patterns,如果与includes有冲突,以excludes为主。
testResources:包含测试资源元素,定义内容与resources类似,不同的是默认测试资源路径是src/test/resources,并且测试资源是不部署的。
plugins配置(plugins是在build标签内):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.0</version> <extensions>false</extensions> <inherited>true</inherited> <configuration> <classifier>test</classifier> </configuration> <dependencies>...</dependencies> <executions>...</executions> </plugin>
extensions:决定是否load这个plugin的extensions,默认为true。
inherited:是否让子工程集成,默认为true。
configuration:通常用于私有不开源的plugin,也可以指定字符集,类似<encoding>UTF-8</encoding>。
pluginManagement:类似denpendencyManagement,只是后者用于管理项目jar包依赖,前者用于管理plugin。pluginManagement与plugin区别是前者列出来,让子工程决定是否引用。