一个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元素的值。例如,在本节中我们使用过groupId
和artifactId
来设置构建配置中的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.System
中getProperties()
方法访问的属性都被暴露成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, 属性和资源过滤。