每个maven文件都需要一个pom文件,作为项目的元数据和依赖配置等,
<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>test</groupId>
<artifactId>test1</artifactId>
<version>test2</version>
<packaging>jar</packaging>
<name>test1</name>
<url>http://maven.apache.org</url>
<description>测试项目</description>
<inceptionYear>2014</inceptionYear>
<licenses>授权文件</licenses>
<organization>liyixing</organization>
<developers>...</developers>
<contributors>...</contributors>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
其中
groupId, artifactId, version三个基础属性是一个项目必须的。
另外还可能包括构建依赖信息,项目详细信息,如开发日期,人员等,还有环境包括一体化,邮件,版本库等。
构建包括,验证,编译,构建,测试,发布等环节
每个构建行为都有默认的三种生命周期,默认,干净,站点
所有的pom(项目对象模型)都从一个超级pom中继承
❶ 默认的超级POM定义了一个单独的远程Maven仓库,ID为central。这是所有
Maven客户端默认配置访问的中央Maven仓库。该配置可以通过一个自定义
的settings.xml文件来覆盖。注意这个默认的超级POM关闭了从中央Maven仓
库下载snapshot构件的功能。如果你需要使用一个snapshot仓库,你就要在
你的pom.xml或者settings.xml中自定义仓库设置。Settings和profile将会
在第 11 章构建Profile中和第 A.1 节 “简介”中的附录 A,附录: Settings
细节小节中具体介绍。
❷ 中央Maven仓库同时也包含Maven插件。默认的插件仓库就是这个中央仓
库。Snapshot被关闭了,而且更新策略被设置成了“从不”,这意味着Maven将永
远不会自动更新一个插件,即使新版本的插件发布了。
❸ build元素设置Maven标准目录布局中那些目录的默认值。
❹ 从Maven 2.0.9开始,超级POM为核心插件提供了默认版本。这么做是为那些没有
在它们POM中指定插件版本的用户提供一些稳定性。
继承
可以再pom中指定继承父pom,来减少配置
<project>
<parent>
<groupId>com.training.killerapp</groupId>
<artifactId>a-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-a</artifactId>
...
</project>
或者指定继承的pom文件的路径
<project>
<parent>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>a-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../a-parent/pom.xml</relativePath>
</parent>
<artifactId>project-a</artifactId>
</project>
以下是一个
Maven POM从它父POM中继承的项目列表:
• 定义符(groupId和artifactId中至少有一个必须被覆盖)
• 依赖
• 开发者和贡献者
• 插件列表
• 报告列表
• 插件执行 (id匹配的执行会被合并)
• 插件配置