虽然maven的目标是使项目构建是可移植的,尽量使在任何机器下都可以构建且结果相同,但是仍然会有一些情况需要我们根据环境等信息来构建不同的内容,这时候就需要用到 maven profiles
Profiles配置激活
profiles可以在全局配置的setting.xml中配置,也可以在项目的pom.xml中进行配置,这里我们主要看下在项目中进行配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <profiles> <profile> <id>dev</id> <activation> <activeByDefault>false</activeByDefault> <jdk>17</jdk> <property> <name>env</name> <value>test123</value> </property> </activation> <properties> <jdbc.url>jdbc:mysql://dev/db</jdbc.url> <jdbc.username>name</jdbc.username> <jdbc.password>pwd</jdbc.password> </properties> </profile> <profile> <id>local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <jdbc.url>jdbc:mysql://local/db</jdbc.url> <jdbc.username>local-name</jdbc.username> <jdbc.password>local-pwd</jdbc.password> </properties> </profile> </profiles>
|
这时候如何如果执行maven命令没有任何参数时,会激活 local(因为它的activeByDefault=true),如:
1 2
| # 激活默认的 local mvn compile
|
如果指定了环境变量,同时jdk版本为17,则会激活 dev(不会激活local, 有匹配到的是不会使用activeByDefault),如
1 2
| # 如果jdk版本为17,则只会激活 dev,否则还是只会激活 local mvn compile -Denv=test123
|
或者可以不管条件,通过-p参数手动强制指定要激活的profile,多个以逗号分隔,如
1 2
| # 手动指定激活 local, dev mvn compile -P local,dev
|
这样我们就实现了通过指定一个或者多个profile,设置对应的属性信息等配置
Profiles使用
下面根据profile设置的信息,来进行使用,这里介绍一下不同环境连接不同的数据库
我们接着之前的配置,首先激活不同的profile时,会设置对应的数据库连接相关变量信息
一般我们会把数据库连接信息配置到配置文件中,如db.properties,这里将其对应的值设置为变量形式
1 2 3
| jdbc.url=${jdbc.url} jdbc.username=${jdbc.username} jdbc.password=${jdbc.password}
|
下一步,需要进行maven resource的插件,来实现变量替换,在pom.xml中配置如下信息
1 2 3 4 5 6 7 8 9
| <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
|
变量替换相关可以参考maven-resources-plugin Filtering
这时候通过maven compile -P <profile>, 在 target中会发现结果文件中的 db.properties已经被替换成对应profile中的变量信息