一般的软件项目,在开发、测试及生产等环境下配置文件中参数是不同的。传统的做法是在项目部署的时候,手动修改或者替换这个配置文件。这样太麻烦了,我们可以用Maven的profile来解决这个问题。只要在打包时加个参数就可以实现想打那个环境的配置文件就打包那个环境的配置文件,提高了效率。
一、多环境配置文件的放置
将不同环境下的配置文件按照文件夹来划分,但需要保证配置文件的文件名在不同环境下必须一致
- dev
- product
- test
我这里只用到两个,配置文件分文件夹后的效果如下图
二、pom文件的配置
(1)配置profile
在pom文件中配置不同的profile。profile里面id标签为这个profile的名字,properties标签的内容为这个profile里面的参数。
我们配置profile的参数为: profiles.active=对应环境文件夹名字
这样在打包资源文件时,通过激活不同的profile来拿取profiles.active的值所对应的文件夹进行打包,代码如下:
<profiles>
<!--本地开发环境 -->
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--生产环境 -->
<profile>
<id>product</id>
<properties>
<profiles.active>product</profiles.active>
</properties>
</profile>
</profiles>
通过<activeByDefault>true</activeByDefault>
设置默认激活的profile
(2)配置maven资源文件打包规则
打包资源文件时,需要通过profile里面的profiles.active的值来切换不同环境的资源文件。具体的配置见下面代码
<!--build部分 -->
<build>
<resources>
<resource>
<!-- 这里会直接把${profiles.active}对应文件夹下的内容打包到classpath下 -->
<directory>src/main/resources</directory>
<includes>
<include>${profiles.active}/**</include>
</includes>
</resource>
</resources>
</build>
可以多了解下<includes>
和<directory>
的作用
这里由于用了<directory>src/main/resources/${profiles.active}</directory>
,它是把${profiles.active}
对应文件夹下的内容打包到classpath
下面了,所以读取${profile.active}
文件夹下的propertis
文件的路径为 classpath:xxx.properties
三、如何打包
mvn clean package -Pproduct
mvn clean package –P 这里填你的profile的id值
特别注意:P是大写的