Maven(二)pom
pom简介
POM是项目对象模型(Project Object Model)的简称,pom.xml是maven项目中的文件,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。每个Maven项目,必须包含pom.xml文件。
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> <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如下,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group --> <groupId>com.companyname.project-group</groupId> <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --> <artifactId>project</artifactId> <!-- 版本号 --> <version>1.0</version> </project>
Pom之间的关系,继承、聚合与依赖
聚合
如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合,即简历一个专门负责聚合的项目
我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。
<modules> <module>模块一</module> <module>模块二</module> <module>模块三</module> </modules>
继承
继承为了消除重复,我们把很多相同的配置提取出来,例如:scope,version等
父模块
可以定义属性:访问属性的方式为${junit.version}
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>4.9</junit.version> </properties>
父模块用dependencyManagement进行管理:在dependencyManagement中配置的元素既不会给parent引入依赖,也不会给它的子模块引入依赖,仅仅是它的配置是可继承的,因此要在子类中配置自己需要的依赖即可。
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencyManagement>
子模块
<!-- 继承Parent项目中的pom.xml配置 --> <parent> <groupId>com.lion.maven</groupId> <artifactId>ParentProject</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 使用相对路径 --> <relativePath>../ParentProject/pom.xml</relativePath> </parent> <dependencies> <dependency> <!-- 可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 --> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>
在Maven中定义了超级pom.xml,任何没有申明自己父pom.xml的pom.xml都将默认继承自这个超级pom.xml。
超级pom.xml中没有groupId、artifactId和version的定义,所以我们在建立自己的pom.xml的时候就需要定义这三个元素。和java里面的继承类似,子pom.xml会完全继承父pom.xml中所有的元素,而且对于相同的元素,一般子pom.xml中的会覆盖父pom.xml中的元素,但是有几个特殊的元素它们会进行合并而不是覆盖。这些特殊的元素是:
dependencies、developers、contributors、resources、plugin列表,包括plugin下面的reports
依赖
项目之间的依赖是通过pom.xml文件里面的dependencies元素下面的dependency元素进行的。一个dependency元素定义一个依赖关系。在dependency元素中我们主要通过依赖项目的groupId、artifactId和version来定义所依赖的项目。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> <optional>true</optional> </dependency> </dependencies>
PS:scope:用于限制相应的依赖范围、传播范围。