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可以自定义时间戳的格式,如下所示:
<project>
  ...
  <properties>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss'Z'</maven.build.timestamp.format>
  </properties>
  ...
</project>

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>

猜你喜欢

转载自blog.csdn.net/u012124304/article/details/77480208