POM全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件,它类似与antx的project.xml文件。pom.xml文件以xml的 形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。总之,它包含了所有的项目 信息。
pom.xml的基本配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lin.learning</groupId>
<artifactId>maven-hellowrold</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>maven-hellowrold</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
modelVersion 描述这个POM文件是遵从哪个版本的项目描述符。
groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。
artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。
version 当前项目产生的artifact的版本以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。
groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。
artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。
version 当前项目产生的artifact的版本以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。
pom.xml文件结构
<project>
<modelVersion>4.0.0</modelVersion>
<!- The Basics 项目的基本信息->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!- Build Settings 项目的编译设置->
<build>...</build>
<reporting>...</reporting>
<!- More Project Information 其它项目信息 ->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings ->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
project是pom.xml的根节点,至于其它元素请参考POM Reference
POM很重要的3个关系
POM有3个很重要的关系:依赖、继承、合成。
1. 依赖关系
1. 依赖关系
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
</dependency>
...
</dependencies>
如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依赖关系加进去即可。
2. 继承关系
另一个强大的变化, maven带来的是项目继承。
2.2.1. 定义父项目
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mygroup </groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<packaging>pom</packaging>
</project>
packaging 类型,定义值为 pom用于定义为parent和合成多个项目。 当然我们创建的maven项目的pom都继承maven的super pom, 如果想看项目(父或子)的完全的pom结构,可以运行:mvn help:effective-pom
就可以了。
2.2.2. 子项目配置
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mygroup </groupId>
<artifactId>my-child-project</artifactId>
<parent>
<groupId>com.mygroup </groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<relativePath>../my-parent</relativePath>
</parent>
</project>
2.3. 合成关系一个项目有多个模块,也叫做多重模块,或者合成项目。 如下的定义:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mygroup </groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<modules>
<module>my-child-project1<module>
<module>my-child-project2<module>
</modules>
</project>
其中module 描述的是子项目的相对路径 。2.4. dependencyManagement和Profile
Maven 还我们提供了一个dependencyManagement元素,用来提供了一种方式来统一依赖版本号。dependencyManagement元素一 般用在顶层的父POM。使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不用显式的列出版本号。 Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个 dependencyManagement元素中指定的版本号,这样就解决了修改依赖版本号不完全的问题。
Maven的Profile元素可以为一个特殊的环境自定义一个特殊的构建,使得不同环境间构建的可移植性成为可能。比如要使用 production profile来运行mvn install,你需要在命令行传入-Pproduction参数,这里production是profile的id。要验证production profile覆盖了默认的Compiler插件配置,可以像这样以开启调试输入(-X) 的方式运行Maven。
来源:http://blog.csdn.net/u012562943/article/details/50461166