9.3.2. 属性引用

一个POM可以通过一对大括弧和前面一个美元符号来包含 对属性的引用。例如,考虑如下的POM

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>project-a</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <build>
    <finalName>org.sonatype.mavenbook-content-zh</finalName>
  </build>
</project>

如果你将这段XML放入pom.xml,然后运行mvn help:effective-pom,你会看到输出包含这一行:

...
<finalName>org.sonatype.mavenbook-project-a</finalName>
...

在Maven读取一个POM的时候,它会在载入POM XML的时候替换这些属性的引用。在Maven的高级使用中Maven属性经常出现,这些属性和其它系统中的属性如Ant或者Velocity类似。它们是一些由MavenProject: org.sonatype.mavenbook:content-zh:0.5 @ /data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh/pom.xml划界的变量。Maven提供了三个隐式的变量,可以用来访问环境变量,POM信息,和Maven Settings:

env

env变量 暴露了你操作系统或者shell的环境变量。例如,在Maven POM中一个对/opt/java/sdk/1.5/bin:/opt/maven/apache-maven-2.2.1/bin:/opt/ant/apache-ant-1.7.1/bin:/opt/java/sdk/current/bin:/opt/maven/2.0/bin:/opt/java/tools/maven/current/bin:/usr/kerberos/bin:/opt/java/sdk/current/bin:/opt/java/tools/ant/current/bin:/usr/local/bin:/bin:/usr/bin:/home/j2ee-hudson/bin的引用将会被${PATH}环境变量替换(或者Windows中的%PATH%)。

project

project变量暴露了POM。你可以使用点标记(.)的路径来引用POM元素的值。例如,在本节中我们使用过groupIdartifactId来设置构建配置中的finalName元素。这个属性引用的语法是:org.sonatype.mavenbook-${project.artifactId}

settings

settings变量暴露了Maven settings信息。可以使用点标记(.)的路径来引用settings.xml文件中元素的值。例如,${settings.offline}会引用~/.m2/settings.xml文件中offline元素的值。

Note

你可能在老的构建中看到使用${pom.xxx}或者仅仅${xxx}来引用POM属性。这些方法已被弃用,我们只应该使用${project.xxx}

除了这三个隐式的变量,你还可以引用系统属性,以及任何在Maven POM中和构建profile中自定义的属性组。

Java系统属性

所有可以通过java.lang.SystemgetProperties()方法访问的属性都被暴露成POM属性。一些系统属性的例子是:j2ee-hudson/home/j2ee-hudson/opt/java/sdk/Sun/jdk1.5.0_12/jre,和Linux。一个完整的系统属性列表可以在java.lang.System类的Javadoc中找到。

x

我们还可以通过pom.xml或者settings.xml中的properties元素设置自己的属性,或者还可以使用外部载入的文件中属性。如果你在pom.xml中设置了一个名为fooBar的属性,该属性就可以通过${fooBar}引用。当你构建一个系统,它针对不同的部署环境过滤资源,那么自定义属性就变得十分有用。这里是在POM中设置${foo}=bar的语法:

<properties>
  <foo>bar</foo>
</properties>

要了解更复杂的可用属性列表,查看Chapter 13, 属性和资源过滤