Maven POM

只要提到 Maven 就离不开 pom.xml,POM 全称为 Project Object Model,这个文件在项目中常常是被用来配置各种需要用到的依赖,也可以配置不同环境下项目的参数信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>

<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>

<!-- 版本号 -->
<version>1.0</version>
</project>

基本元素

  • project 是 pom.xml 文件描述符的根
  • modelVersion 指定 pom.xml 符合哪个版本的描述符,maven 2 和 3 只能为 4.0.0
  • parent 用来表示当前 pom 文件继承自的父类 pom.xml 文件

依赖配置

groupIdartifactIdversion 与基本配置中的意义相同
maven 根据 groupId、artifactId 和 version 组成的 groupId:artifactId:version 来唯一识别一个 jar 包
其中,version 表示一个项目的特定版本,在使用 maven 进行版本管理的时候有几个特殊的关键字:
snapshot 快照,alpha 内部测试,beta 公测,release 稳定,GA 正式发布
Scope 有 5 种可用的限定范围:

  • compile: maven 的默认范围,要求编译、测试、运行阶段都需要模块对应的 jar 包在 classpath 中
  • provided: 模块对应的 jar 包在编译、测试的 classpath 中
  • runtime: 模块对应的 jar 包在测试、运行时的 classpath 中
  • test: 模块对应的 jar 包在测试的 classpath 中
  • system: 模块对应的 jar 包在编译、测试的 classpath 中,与本机系统关联,可移植性差

继承

引入 parent 标签可以让当前 POM 继承自一个父 POM,父 POM 中包含一些公共依赖并统一管理这些依赖。如果需要改变公共依赖的版本信息,只需要修改父 POM 包,继承了父包的子 POM 都能同步该更新。

参考

Maven 教程之 pom.xml 详解