一、什么是POM
Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
一个完整的pom.xml文件,放置在项目的根目录下。
4.0.0 … … … … … … … … … … … … … … … … … … … … … … … … … … … …
二、基本设置
1、maven的协作相关属性
4.0.0 org.codehaus.mojo my-project 1.0 war
- groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
- artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
- version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
- packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par
2、POM之间的关系
主要用于POM文件的复用。
a)依赖关系:依赖关系列表(dependency list)是POM的重要部分
… junit junit 4.0 test
- groupId , artifactId , version :
- scope : compile(default),provided,runtime,test,system
- exclusions
b)继承关系:继承其他pom.xml配置的机制。
比如父pom.xml:
[...] [...] junit junit 4.4 test
在子pom.xml文件继承它的依赖(还可以继承其他的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):
[...][...] com.devzuz.mvnbook.proficio proficio 1.0-SNAPSHOT
在这种机制下,maven还提供了一个类似java.lang.Object的顶级父pom.xml文件:
4.0.0 Maven Default Project central Maven Repository Switchboard default http://repo1.maven.org/maven2 false central Maven Plugin Repository http://repo1.maven.org/maven2 default false never target target/classes ${project.artifactId}-${project.version} target/test-classes src/main/java src/main/scripts src/test/java src/main/resources src/test/resources maven-antrun-plugin 1.1 maven-assembly-plugin 2.2-beta-2 maven-clean-plugin 2.2 maven-compiler-plugin 2.0.2 maven-dependency-plugin 2.0 maven-deploy-plugin 2.3 maven-ear-plugin 2.3.1 maven-ejb-plugin 2.1 maven-install-plugin 2.2 maven-jar-plugin 2.2 maven-javadoc-plugin 2.4 maven-plugin-plugin 2.4.1 maven-rar-plugin 2.2 maven-release-plugin 2.0-beta-7 maven-resources-plugin 2.2 maven-site-plugin 2.0-beta-6 maven-source-plugin 2.0.4 maven-surefire-plugin 2.4.2 maven-war-plugin 2.1-alpha-1 target/site release-profile performRelease true true org.apache.maven.plugins maven-source-plugin attach-sources jar true org.apache.maven.plugins maven-javadoc-plugin attach-javadocs jar true org.apache.maven.plugins maven-deploy-plugin true
可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:
mvn help:effective-pomc)聚合关系:用于将多个maven项目聚合为一个大的项目。
4.0.0 org.codehaus.mojo my-parent 2.0 my-project
3、属性
maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。有以下分类:
- env.X:操作系统环境变量,比如${env.PATH}
- project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
- settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
- Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
- 自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}
4、构建设置
构建有两种build标签:
… … …
build中的主要标签:Resources和Plugins。
Resources:用于排除或包含某些资源文件
META-INF/plexus false ${basedir}/src/main/plexus configuration.xml **/*.properties
Plugins:设置构建的插件
… org.apache.maven.plugins maven-jar-plugin 2.0 false true test … …