Maven为了支持构建的灵活性,内置了3大特性,即:属性、Profile
和资源过滤。
6.1 Maven属性
Maven
的属性与Java
代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管理并且可以减少日后升级版本的工作量,降低错误发生的概率。
在POM
文件中,可以通过${属性名称}
的方式来引用属性。
在Maven
中,存在6类属性,分别为:
1) 内置属性,主要有两个,分别为:${basedir}
表示项目根目录,即POM文件所在的目录、${version}
表示项目的版本。
2) POM
属性,用户可以通过该类属性引用POM
文件中对应元素的值,如:
${project.artifactId}对应到的值,常用的POM属性有:
${project.build.sourceDirectory}项目的主源码目录,默认为src/main/java/
${project.build.testSourceDirectory}项目的测试源码目录,默认为src/test/java
${project.build.directory}项目构建输出目录,默认为target/
${project.outputDirectory}项目主代码编译输出目录,默认为target/classes
${project.testOutputDirectory}项目测试代码输出目录,默认为target/test-classes
${project.groupId}项目的groupId
${project.artifactId}项目的artifactId
${project.version}项目的version,与${version}等价
${project.build.finalName}项目打包输出文件名称,默认为${project.artifactId}-${project.version}
Remark:每一个
POM
属性都对应到一个POM
元素
3) 自定义属性:用户在POM
文件的
元素下定义的Maven
属性,如:
1.5.9.RELEASE
4) Settings属性
与POM
属性同理,使用settings.
开头的属性引用settings.xml
文件中xml
元素的值,如常用的${settings.localRepository}
引用本地仓库的地址。
5) Java系统属性
所有java
系统属性都可以使用Maven
属性进行引用,如${user.home}
指向用户目录,可以通过mvn help:system
查看所有的java
系统属性。
6) 环境变量属性
所有的环境变量可以使用env.
开头的Maven
属性进行引用,如${env.JAVA_HOME}
指向了JAVA_HOME
环境变量的值,可以通过mvn help:system
查看所有的环境变量。
6.2 Maven属性最佳实践
6.2.1通过自定义属性消除重复
基于Java
平台的开发,目前基本都会引进springframework
帮我们简化工作,需要MVC
功能,则引入spring-webmvc
,需要事务管理功能,引入spring-tx
。在我们POM
文件中引入相关依赖:
org.springframework
spring-tx
4.3.14.RELEASE
org.springframework
spring-webmvc
4.3.14.RELEASE
当我们需要升级springframework
的时候,需要修改多个地方,如果这些依赖不放在一起的时候,则容易造成漏更改,导致多版本并存,这个时候,可以使用自定义属性,如:
4.3.14.RELEASE
org.springframework
spring-tx
${springframework.version}
org.springframework
spring-webmvc
${springframework.version}
当需要进行版本升级的时候,只需要修改springframework.version
属性即可。
6.2.2使用POM属性依赖内部模块
在一个多项目中,模块之间一般会有依赖,并且这些模块通常会使用同一的groupId
和version
,这个时候可以使用POM
属性,如:
${project.groupId}
demo-base
${project.version}
这样,当进行项目版本升级时,就不需要更改依赖模块的版本了。