属性
通过 properties 元素用户可以自定义一个或者多个 Maven 属性,然后在 pom 其他的地方使用 ${属性名} 的方式引用该属性,这种方式最大意义在于消除重复。
一、内置属性
${basedir} 表示项目根目录,即包含 pom.xml 文件的目录
${version} 等同于 或者{pom.version} 表示项目版本
二、POM 属性
所有 pom 中的元素都可以用 project. 例如 ${project.artifactId} 对应了 < project>元素的值。常用的 POM 属性包括:
${project.build.sourceDirectory} : 项目的主源码目录,默认为 src/main/java/.
${project.build.testSourceDirectory} : 项目的测试源码目录,默认为 /src/test/java/.
${project.build.directory} : 项目构建输出目录,默认为 target/.
${project.build.outputDirectory} : 项目主代码编译输出目录,默认为 target/classes/.
${project.build.testOutputDirectory} : 项目测试代码编译输出目录,默认为 target/testclasses/.
${project.groupId}: 项目的 groupId.
${project.artifactId} : 项目的 artifactId.
${project.version} : 项目的 version, 等同于 ${version}
${project.build.finalName} : 项目打包输出文件的名称,默认为 ${project.artifactId}${project.version}
三、自定义属性
在 pom 中元素下自定义的 Maven 属性
<properties> <swagger.version>2.2.2</swagger.version> </properties> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger.version}</version> </dependency>
四、Settings 属性
所有用的的 settings.xml 中的设定都可以通过 settings。前缀进行引用与 POM 属性同理。
如 ${settings.localRepository} 指向用户本地仓库的地址
五、Java 系统属性
所有 Java 系统属性都可以使用 Maven 属性引用,例如 ${user.home} 指向了用户目录。
可以通过命令行 mvn help:system 查看所有的 Java 系统属性
六、环境变量属性
所有环境变量都可以使用以 env. 开头的 Maven 属性引用。例如 ${env.JAVA_HOME} 指代了 JAVA_HOME 环境变量的值。
也可以通过命令行 mvn help:system 查看所有环境变量。
七、父级工程属性
上级工程的 pom 中的变量用前缀 引用。上级工程的版本也可以这样引用{parent.version}
Profile
profile 特性可以让我们定义多个 profile,然后每个 profile 对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。
profile 可以在以下几个地方声明:
m.xml:这里声明的 profile 只对当前项目有效
用户 settings.xml:.m2/settings.xml 中的 profile 对该用户的 Maven 项目有效
全局 settings.xml:conf/settings.xml,对本机上所有 Maven 项目有效
示例:
<project> ... <profiles> <profile> <id>dev</id> <properties> <active.profile>dev</active.profile> <key1>value1</key1> <key2>value2</key2> </properties> <!-- 默认激活配置 --> <activation> <activeByDefault>true</activeByDefault> </activation> <!-- 在该 profile 下才会引入的依赖 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependencies> <!-- 在该 profile 下才会加载的变量文件 --> <build> <filters> <filter>../profile/test-pre.properties</filter> </filters> </build> </profile> </profiles> ... </project>