Maven 屬性引用

一個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.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-${project.artifactId}。

settings

settings變量暴露了Maven settings信息。可以使用點標記(.)的路徑來引用settings.xml文件中元素的值。例如,${settings.offline}會引用~/.m2/settings.xml文件中offline元素的值。

注意
你可能在老的構建中看到使用${pom.xxx}或者僅僅${xxx}來引用POM屬性。這些方法已被棄用,我們只應該使用${project.xxx}。

Java系統屬性

如:${java.home}

x

我們還可以通過pom.xml或者settings.xml中的properties元素設置自己的屬性,或者還可以使用外部載入的文件中屬性。如果你在pom.xml中設置了一個名爲fooBar的屬性,該屬性就可以通過${fooBar}引用。當你構建一個系統,它針對不同的部署環境過濾資源,那麼自定義屬性就變得十分有用。這裏是在POM中設置${foo}=bar的語法:

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

參考《Maven權威指南中文版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章