1 概念介绍
一个项目所有的配置都放置在 POM 文件中:定义项目的类型、名字,管理依赖关系,定制插件的行为等等。比如说,你可以配置 compiler 插件让它使用 java1.5 来编译。
- <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.mycompany.helloworld</groupId>
- <artifactId>helloworld</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>helloworld</name>
- <url>http://maven.apache.org</url>
- <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>
![1040703-20161205113026554-1600191863.png](https://i-blog.csdnimg.cn/blog_migrate/0e589001a4bba4e15b57616a69195eee.png)
<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.mycompany.helloworld</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloworld</name>
<url>http://maven.apache.org</url>
<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>
在 POM 中,groupId,artifactId, packaging, version 叫作 maven 坐标,它能唯一的确定一个构件。有了 maven 坐标,我们就可以用它来指定我们的项目所依赖的其他项目,插件,或者父项目。
通常,大项目一般会分成几个子项目。在这种情况下,每个子项目就会有自己的 POM 文件,然后它们会有一个共同的父项目。这样只要构建父项目就能够构建所有的子项目了。子项目的 POM 会继承父项目的 POM。另外,所有的 POM都继承了一个 Super-POM。Super-POM 设置了一些默认值,比如在前面提到的默认的目录结构,默认的插件等等,它遵循了惯例优于配置的原则。如下图:
2 Pom文件的继承与聚合
继承
开发中一般将公共的配置——依赖关系(包括公共的类库、插件、信息配置)放到一个父项目的pom文件,然后其它项目的pom文件,都继承该pom文件。继承的代码如下:
这里需要注意,子pom文件不是一旦继承了父pom就会无条件地继承它所有的依赖关系,即插件、类库等。如果子pom想继承父pom的某个插件,只需要引入父pom中该插件的groupId与artifactId信息(不用写该插件其它的配置信息)即可。这样子pom是可以有选择性的继承它自己所需要的东西。
聚合
即大项目中一般会有一个空的Maven项目(只有pom文件,没有Java代码)作为父项目,该项目的Pom文件(Modules标签中)聚合了其它子项目的Pom文件,然后只要构建父项目就能够构建所有的子项目了。