一个POM可以通过一对大括弧和前面一个美元符号来包含 对属性的引用。例如,考虑如
下的POM:
4.0.0
org.sonatype.mavenbook
project-a
1.0-SNAPSHOT
jar
org.sonatype.mavenbook-content-zh
如果你将这段XML放入pom.xml,然后运行mvn help:effective-pom,你会看到输出包含
这一行:
…
org.sonatype.mavenbook-project-a
…
在Maven读取一个POM的时候,它会在载入POM XML的时候替换这些属性的引用。在Maven
的高级使用中Maven属性经常出现,这些属性和其它系统中的属性如Ant或者Velocity
类似。它们是一些由MavenProject: org.sonatype.mavenbook:content-zh:0.6-SNAPSHOT
@ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
content-zh/pom.xml划界的变量。Maven提供了三个隐式的变量,可以用来访问环境变
量,POM信息,和Maven Settings:
env
env变量 暴露了你操作系统或者shell的环境变量。例如,在Maven POM中一个
对/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/bin:/usr/local/bin:/usr/local/
maven/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/java/latest/bin:/usr/
local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/
bin:/usr/local/bin的引用将会被/usr/local/bin:/usr/local/maven/bin:/usr/
kerberos/sbin:/usr/kerberos/bin:/usr/java/latest/bin:/usr/local/sbin:/
usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/bin:/usr/
local/bin环境变量替换(或者Windows中的%PATH%)。
project
project变量暴露了POM。你可以使用点标记(.)的路径来引用POM元素
的值。例如,在本节中我们使用过groupId和artifactId来设置构建配置
中的finalName元素。这个属性引用的语法是:org.sonatype.mavenbook-
p
r
o
j
e
c
t
.
a
r
t
i
f
a
c
t
I
d
。
s
e
t
t
i
n
g
s
s
e
t
t
i
n
g
s
变量暴露了
M
a
v
e
n
s
e
t
t
i
n
g
s
信息。可以使用点标记(
.
)的路径来引用
s
e
t
t
i
n
g
s
.
x
m
l
文件中元素的值。例如,
{project.artifactId}。 settings settings变量暴露了Maven settings信息。可以使用点标记(.)的路径来引 用settings.xml文件中元素的值。例如,
project.artifactId。settingssettings变量暴露了Mavensettings信息。可以使用点标记(.)的路径来引用settings.xml文件中元素的值。例如,{settings.offline}会引用~/.m2/
settings.xml文件中offline元素的值。
注意
你可能在老的构建中看到使用
p
o
m
.
x
x
x
或者仅仅
{pom.xxx}或者仅仅
pom.xxx或者仅仅{xxx}来引用POM属性。这
些方法已被弃用,我们只应该使用
p
r
o
j
e
c
t
.
x
x
x
。除了这三个隐式的变量,你还可以引用系统属性,以及任何在
M
a
v
e
n
P
O
M
中和构建
p
r
o
f
i
l
e
中自定义的属性组。
J
a
v
a
系统属性所有可以通过
j
a
v
a
.
l
a
n
g
.
S
y
s
t
e
m
中
g
e
t
P
r
o
p
e
r
t
i
e
s
(
)
方法访问的属性都被暴露成
P
O
M
属性。一些系统属性的例子是:
h
u
d
s
o
n
,
/
h
o
m
e
/
h
u
d
s
o
n
,
/
u
s
r
/
l
i
b
/
j
v
m
/
j
a
v
a
−
1.6.0
−
o
p
e
n
j
d
k
−
1.6.0.0
/
j
r
e
,和
L
i
n
u
x
。一个完整的系统属性列表可以在
j
a
v
a
.
l
a
n
g
.
S
y
s
t
e
m
类的
J
a
v
a
d
o
c
中找到。
x
我们还可以通过
p
o
m
.
x
m
l
或者
s
e
t
t
i
n
g
s
.
x
m
l
中的
p
r
o
p
e
r
t
i
e
s
元素设置自己的属性,或者还可以使用外部载入的文件中属性。如果你在
p
o
m
.
x
m
l
中设置了一个名为
f
o
o
B
a
r
的属性,该属性就可以通过
{project.xxx}。 除了这三个隐式的变量,你还可以引用系统属性,以及任何在Maven POM中和构建 profile中自定义的属性组。 Java系统属性 所有可以通过java.lang.System中getProperties()方法访问的属性都被暴露 成POM属性。一些系统属性的例子是:hudson,/home/hudson,/usr/lib/jvm/ java-1.6.0-openjdk-1.6.0.0/jre,和Linux。一个完整的系统属性列表可以 在java.lang.System类的Javadoc中找到。 x 我们还可以通过pom.xml或者settings.xml中的properties元素设置自己的属 性,或者还可以使用外部载入的文件中属性。如果你在pom.xml中设置了一个名 为fooBar的属性,该属性就可以通过
project.xxx。除了这三个隐式的变量,你还可以引用系统属性,以及任何在MavenPOM中和构建profile中自定义的属性组。Java系统属性所有可以通过java.lang.System中getProperties()方法访问的属性都被暴露成POM属性。一些系统属性的例子是:hudson,/home/hudson,/usr/lib/jvm/java−1.6.0−openjdk−1.6.0.0/jre,和Linux。一个完整的系统属性列表可以在java.lang.System类的Javadoc中找到。x我们还可以通过pom.xml或者settings.xml中的properties元素设置自己的属性,或者还可以使用外部载入的文件中属性。如果你在pom.xml中设置了一个名为fooBar的属性,该属性就可以通过{fooBar}引用。当你构建一个系统,它针
对不同的部署环境过滤资源,那么自定义属性就变得十分有用。这里是在POM中
设置${foo}=bar的语法:
bar