1. 灵活构建
1.1 三大特性
- 属性
- 资源过滤
- Profile
1.2 属性
-
自定义属性
- 用户可以在项目的pom文件的<properties>元素中自定义maven属性。
- 在pom文件的其他地方,使用${属性名称}引用该属性。
-
意义在于消除重复,示例代码如下。
<project> <properties> <springframework.groupId>org.springframework</springframework.groupId> <springframework.version>5.2.1.RELEASE</springframework.version> </properties> <dependencies> <dependency> <groupId>${springframework.groupId}</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>${springframework.groupId}</groupId> <artifactId>spring-aop</artifactId> <version>${springframework.version}</version> </dependency> </dependencies> </project>
-
内置属性
两个常用的内置属性:-
${basedir}
: 项目根目录,即包含pom文件的目录 -
${version}
: 项目版本
-
-
pom属性
用户可以使用该类属性引用pom文件中对应元素的值。
常用的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}等价。 -
${project.build.finalName}
: 项目打包输出文件的名称。默认为${project.artifactId}-${project.version}
-
-
settings属性
用户可以使用该类属性引用settings文件中对应元素的值。-
${settings.localRepository}
:用户本地仓库
-
-
Java系统属性
- 所有Java系统属性都可以使用Maven属性引用。
- 使用
mvn help:system
查看所有的Java系统属性。 -
${user.home}
:用户目录
-
环境变量属性
- 所有环境变量都可以使用env.开头的Maven属性引用。
- 使用
mvn help:system
查看所有的环境变量属性。 -
${env.JAVA_HOME}
: JAVA_HOME环境变量的值。
1.3 资源过滤
-
遇到的问题
- 多环境配置:项目不同的环境对应着不同的数据库配置,手动更改这些配置往往比较低效。
-
解决
- 使用maven属性将这些会发生变化的部分提取出来。
- 然后开启资源目录的过滤功能,就可以解决这一问题。
-
示例
-
数据库配置
# src/main/resources/application.properties database.jdbc.driverClass=${db.driver} database.jdbc.connectionUrl=${db.url} database.jdbc.username=${db.user} database.jdbc.password=${db.pw}
-
开启资源过滤
<project> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql//localhost:3306/test</db.url> <db.user>dev-user</db.user> <db.pw>dev-pwd</db.pw> </properties> <build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
-
编译代码
mvn compile
- 查看主代码编译输出目录下的资源文件,已经得到了替换。
database.jdbc.driverClass=com.mysql.jdbc.Driver database.jdbc.connectionUrl=jdbc:mysql//localhost:3306/test database.jdbc.username=aaa database.jdbc.password=aaa-pwd
-
1.4 maven profile
-
针对不同环境的profile
-
示例:基于开发和测试环境的profile
<project> <profiles> <profile> <id>dev</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql//localhost:3306/test</db.url> <db.user>dev</db.user> <db.pw>dev-pwd</db.pw> </properties> </profile> <profile> <id>test</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql//localhost:3306/test</db.url> <db.user>test</db.user> <db.pw>test-pwd</db.pw> </properties> </profile> </profiles> </project>
-
-
激活profile
-
命令行激活
- 使用maven命令行参数
-P
加上profile的id
,多个id之间逗号分隔 - 如:
mvn clean compile -Pdev
- 使用maven命令行参数
-
默认激活
-
配置
profile > activation > activationByDefault
元素的值为true
,该profile默认激活<project> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql//localhost:3306/test</db.url> <db.user>dev</db.user> <db.pw>dev-pwd</db.pw> </properties> </profile> </profiles> </project>
-
-
系统属性激活
mvn ... -D属性xx=属性xx的值
- 指定的属性存在,激活profile
-
指定的属性存在,并且值等于x时,激活profile
<project> <profiles> <profile> <id>dev</id> <activation> <property> <name>test</name> <value>x</value> </property> </activation> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql//localhost:3306/test</db.url> <db.user>dev</db.user> <db.pw>dev-pwd</db.pw> </properties> </profile> </profiles> </project>
-
文件存在与否激活
<project> <profiles> <profile> <id>dev</id> <activation> <file> <exists>x.properties</exists> <missing>y.properties</missing> </file> </activation> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql//localhost:3306/test</db.url> <db.user>dev</db.user> <db.pw>dev-pwd</db.pw> </properties> </profile> </profiles> </project>
-
-
查看当前激活的profile
mvn help:active-profiles
-
列出所有的profile
mvn help:all-profiles
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。