13.2. Maven属性

你可以在pom.xml文件或者资源文件中使用属性,资源文件被会Maven Resource插件的过滤特性处理。一个属性永远包含在${}中。例如,要引用project.version属性,就需要这样写:

0.5

在任何Maven项目中都有一些隐式的属性,这些隐式的属性是:

project.*

Maven的项目对象模型(POM)。你可以使用该project.*前缀来引用任何在Maven POM中的值。

settings.*

Maven Settings。你使用该settings.*前缀来引用~/.m2/settings.xml文件中Maven Settings的值。

env.*

环境变量如PATHM2_HOME可以使用env.*前缀来引用。

系统属性

任何可以通过System.getProperty()方法获取的属性都可以作为Maven属性被引用。

除了上述这些隐式属性,Maven POM,Maven Settings,或者Maven Profile可以有一组任意的,用户自定义的属性。下面的小节详细介绍一个Maven项目中各种可用的属性。

13.2.1. Maven项目的属性

当一个Maven项目属性被引用的时候,属性名就直接引用Maven项目对象模型(POM)的一个属性。具体的说,你正在引用类org.apache.maven.model.Model的一个属性,这个类以隐式项目变量的方式向外暴露。当你使用该隐式变量引用属性的时候,你实际上正在使用简单的点标记来引用Model对象的一个bean属性。例如,当你引用0.5的时候,你实际上是在调用暴露出来的Model对象实例的getVersion()方法。

POM同样也在所有Maven项目中以pom.xml文档的形式展现。任何在Maven POM 中的东西都可以用属性来引用。关于POM结构的完整参考可以访问http://maven.apache.org/ref/2.0.9/maven-model/maven.html。下面的列表展示了一些Maven项目中常见的属性引用。

project.groupIdproject.version

大型的,多模块构建的项目通常共享同样的groupIdversion定义符。当你为共享同样groupIdversion的模块声明相互依赖的时候,为它们使用属性引用是一个很好的办法:

<dependencies>
  <dependency>
    <groupId>org.sonatype.mavenbook</groupId>
    <artifactId>sibling-project</artifactId>
    <version>0.5</version>
  </dependency>
</dependencies>
project.artifactId

一个项目的artifactId通常被用作发布包的名称。例如,在一个打包类型为WAR的项目中,你会想生成一个不带版本定义符的WAR文件。为此,你就需要在你的POM中引用project.artifactId,如:

<build>
  <finalName>content-zh</finalName>
</build>
project.nameproject.description

项目的name和description对于文档来说是比较常用的属性引用。你只要简单的引用这些属性,而不需要担心你所有的站点文档是否维护了一致的简短描述信息。

project.build.*

如果你试图在Maven中引用输出目录,你绝不应该使用如target/classes的字面量,而是应该使用属性来引用这些目录。

  • project.build.sourceDirectory

  • project.build.scriptSourceDirectory

  • project.build.testSourceDirectory

  • project.build.outputDirectory

  • project.build.testOutputDirectory

  • project.build.directory

sourceDirectoryscriptSourceDirectory,和testSourceDirectory提供了项目源码目录的访问方式。outputDirectorytestOutputDirectory则能让你访问Maven放置字节码和其它构建输出的目录。directory引用的目录就是包含上述两个输出目录的父目录。

其它项目属性引用

在一个POM中有数百的属性可以引用。关于POM结构的完整参考见http://maven.apache.org/ref/2.0.9/maven-model/maven.html

关于Maven Model对象可用属性的完整列表,可以看一下maven-model项目的JavaDoc:http://maven.apache.org/ref/2.0.9/maven-model/apidocs/index.html。当你载入这JavaDoc之后,看一下Model类。根据这个Model类的JavaDoc,你应该能够找到你想要引用的POM属性。如果你想要引用构建的输出目录,可以使用Maven Model的JavaDoc,明白该输出目录是通过model.getBuild().getOutputDirectory()引用的;该方法调用会被翻译成Maven的属性引用/data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh/target/classes

Maven Model定义了POM的结构,要了解关于Maven Model模块的更多信息,可以访问Maven Model的项目页面:http://maven.apache.org/ref/2.0.9/maven-model