你可以在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.*
-
环境变量如
PATH
和M2_HOME
可以使用env.*
前缀来引用。 - 系统属性
-
任何可以通过
System.getProperty()
方法获取的属性都可以作为Maven属性被引用。
除了上述这些隐式属性,Maven POM,Maven Settings,或者Maven Profile可以有一组任意的,用户自定义的属性。下面的小节详细介绍一个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.groupId
和project.version
-
大型的,多模块构建的项目通常共享同样的
groupId
和version
定义符。当你为共享同样groupId
和version
的模块声明相互依赖的时候,为它们使用属性引用是一个很好的办法:<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.name
和project.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
sourceDirectory
,scriptSourceDirectory
,和testSourceDirectory
提供了项目源码目录的访问方式。outputDirectory
和testOutputDirectory
则能让你访问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。