本文译自:http://maven.apache.org/pom.html
属性
属性是最后需要理解的POM基础。跟Ant中属性一样,Maven的属性是值的占位符。在一个POM内可以在任何位置使用${X}(X代表属性)符号来访问属性的值。
它们有五种不同的样式:
1. env.x:带有”env”前缀的变量会返回系统的环境变量。例如,${env.PATH}就包含了PATH环境变量。
注意:在Windows系统中环境变量是大小写无关的,也就是说在Windows系统中%PATH%和%Path%的返回值是相同的,但Maven是区分大小写的。为了可靠,Maven2.1.0中环境变量的命名规范统一使用大写。
2. project.x:在POM中使用圆点(.)表示路径来代表相应元素的值,例如通过${project.version>来访问<project><version>1.0</version></project>的值。
3. setting.x:在settings.xml中使用圆点(.)表示路径来代表相关元素的值,例如通过${settings.offline>来访问{settings><offline>false</offline></settings>的值。
4. Java系统的属性:通过java.lang.System.getProperties()可以获取的所有的属性都可以用做POM属性,如${java.home}。
5. x:用于设置POM中<properties/>中对应元素,如可以使用${someVar}来获取或设置<properties><someVar>value</someVar></properties>的值。
编译设置
除了以上讲述的POM的基础知识,在去宣称具备了POM的基本能力之前,还必须要理解两个元素,它们是处理工程的目录结构声明和管理插件的build元素和反映build元素内容的reporting元素。
Build
依据POM 4.0.0的XSD,build元素在概念上被分成两部分,一部分是BaseBuild类型,它包含了两种build元素(位于project元素之下的顶级build元素和位于profiles元素之下的build元素)中的共同元素集;一部分是Build类型,包含了BaseBuild元素集以及更多的元素的顶层定义。下面我们来分析这两部分的共同元素。
注意:可以使用”project build”和”profile build”来区分build元素。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<!-- "Project Build" contains more elements than just the BaseBuild set -->
<build>...</build>
<profiles>
<profile>
<!-- "Profile Build" contains a subset of "Project Build"s elements -->
<build>...</build>
</profile>
</profiles>
</project>
BaseBuild元素集
确切的说,BaseBuild元素集是POM中两种Buil元素之间的基本元素集。
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<filters>
<filter>filters/filter1.properties</filter>
</filters>
...
</build>
defaultGoal:如果没有给定编译目标则使用这个元素设定的值作为执行目标或阶段。它应该跟命令行中定义的目标或阶段相同(如jar:jar或install)。
directory:这个元素指定了编译后的成果物存放的目录,默认是${basedir}/target。
finalName:在编译的时候,这个元素的值会跟对应的工程名称绑定(例如:my-project-1.0.jar),它的默认值${artifactId}-${version}。”finalName”这个术语有些用词不当,但是,跟工程绑定的编译插件会很好的忽略或编辑这个名字(但通常插件不会这么做)。例如,如果给编译目标为jar的classifier元素设置为test,那么maven-jar-plugin实际的编译结果文件时my-project-1.0-test.jar。
filter:这个元素指定了益包含属性列表的*.properties文件,在接收设置的资源中会使用这个文件。在编译时,这个过滤器文件中定义的”name=value”对会被用于替换资源中的${name}字符串。上例中定义的filter1.properties文件在filters/目录下,Maven的默认过滤器目录是${basedir}/src/main/filters/。
有关更多过滤器的信息,请看”快速指南”。