背景
针对于开发项目中,软件会面临着不同的运行环境,比如测试环境,生产环境,开发环境.每个环境下对应的配置数据源,日志配置,资源配置等可能也不一样,需要自行修改属性配置文档,这样做会很大程度上浪费人的精力,然而maven提供了profile功能就能很好的解决.
Profile简述
profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。
- 对于某个具体的项目来说,如果想使用profile功能,直接在pom文件里配置即可(具体可参照下面).
- 如果是针对于某个特定的用户或者配置全局的,这就需要修改maven安装目录下的settings.xml文件.
配置动态打包
1.先上一下配置文档的目录结构
dev.properties里面的具体内容(截取了一部分,其他环境的类似):
config.properies内容:
2.profile的配置方式
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 发布环境 -->
<id>release</id>
<properties>
<profiles.active>release</profiles.active>
</properties>
</profile>
<profile>
<!-- 测试环境 -->
<id>beta</id>
<properties>
<profiles.active>beta</profiles.active>
</properties>
</profile>
</profiles>
3.配置属性文件位置
在build标签下面:
<filters>
<filter>src/main/resources/profiles/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
正如前面图上所示,开发环境,测试环境,生产环境下的属性配置文档都放在了src/main/resources/profiles目录下,文件命名规则为*.properties.
调用过程:
- 如上通过profiles标签选中你要使用的环境
- 通过package命令将环境变量注入到config.properties中
- 项目会自动加载config.properties文件
4.激活profile
1.上面的代码中有默认的配置方式:
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
2.使用-P参数显示激活一个profile
当我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为dev的profile,我们就可以这样做:
mvn package –Pdev
这里假设dev是在settings.xml中使用dev标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。
PS:最后要说明的是,在属性配置文档中不要使用不合要求的其他字符,会导致特殊字符后面所有的变量都无法注入到属性文档中.