Maven的Pom文件详解
项目继承
Super POM是maven默认的POM,所有的POM如果不显式指定parent pom的话都会继承它,即Super POM中的配置会被继承到项目中的其他pom中。
可以修改默认的Super Pom,来继承父pom的一些属性:
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</parent>
当父pom还没有安装到本地仓库时,可以使用:
Scenario:
|-- my-module
| `-- pom.xml
`-- parent
`-- pom.xml
Solution:
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
项目聚合(Project Aggregation)
除了指定模块的父pom,我们还可以从父pom中指定子模块,这样父对象就知道了其模块,当maven命令被调用时用来处理父项目时,该maven命令也会处理父项目的模块,使用项目聚合,需要满足一下条件:
- 设置parent pom的packaging为pom
- 在parent pom中指定其模块(子pom)的目录
项目继承VS项目聚合(Project Inheritance vs Project Aggregation)
- 如果我们有很多个maven项目,它们的配置都相似,那么我们就可以创建一个父项目,把相同的配置放到父项目中,然后让这些子项目继承它就可以了;
- 如果我们有一组项目要一起构建和处理时,我们可以创建一个父项目,让后让父项目将这些项目声明为其模块,这样我们构建父项目的时候其模块也会被构建
- 在父项目中定义的变量可以在子项目中使用
项目插值和变量(Project Interpolation and Variables)
Maven推荐的实践经验之一是不要重复。然而很多时候我们需要在不同的地方使用相同的值,为了保证这些值只指定一次,Maven允许在pom中使用自定义和预定义的变量。
例如,使用以下方式可以访问project.version变量:
<version>${project.version}</version>
需要注意的是,这些变量的处理是在继承之后,即如果父项目使用一个变量,最终使用的变量值是在子项目中定义的。
可用变量
1.项目模型变量
任何一个单值的元素都可以作为一个变量被引用,如:${project.groupId}, ${project.version}
,这些变量都以project.为前缀。
2.特殊变量
- project.basedir:当前项目的目录
- project.baseUri:当前项目的目录的URI
maven.build.timestamp:项目构建开始时的时间戳
通过指定属性maven.build.timestamp.format可以自定义时间戳的格式,如下所示:
…
yyyy-MM-dd’T’HH ss’Z’
…
properties
在properties中定义的属性可以作为变量在项目中使用:
<project>
...
<properties>
<mavenVersion>2.1</mavenVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>${mavenVersion}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>${mavenVersion}</version>
</dependency>
</dependencies>
...
</project>
还没有评论,来说两句吧...