最近使用到了maven的profile功能,发现这个功能的确很好用也很实用,这块的知识比较多也比较乱,其实真正理解了之后非常简单,为了巩固总结知识,有个更清晰的知识体系,本文诞生了,希望能让像我一样零基础的小白一看就懂,有请戏精,闪亮登场~~
1.背景
作为一名猿,在实际的项目开发中,通常会有很多配置环境,比如最基本的:开发、测试、生产;不同的环境,某些文件的配置是不一样的(如:数据库连接信息、properties文件的配置等),如果我们进行开发or测试时每次都得手动去修改配置文件,难免有些麻烦且容易出现问题(我反正是深有体会╥﹏╥),所以,当当当当~maven的profile功能就出现了。
2.Profile简介
简单说一下,maven的profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的目的。
3.Profile在哪定义
一般来讲,有三种地方可以定义,不同的地方,作用范围不同,可配置项也不同;
- 针对于特定项目的profile配置,我们可以定义在该项目的pom.xml中。
- 针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户目录下的“.m2”目录下。
- 全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。
4.Profile使用实例
ps:前方将使用Eclipse来演示,主要以pom配置为主,重点涉及到了profile、filter、resource标签,工程源代码在文章最末尾。
过多的理论就不再说了,还是配合着实例代码来看更容易理解一些。另外,构建不同的环境配置主要有两种效果(或者叫实现方式):
- 第一种,根据不同的环境生成不同的配置文件(profile+resources);
- 第二种,根据不同的环境生成不同的配置内容,并替换原配置文件中的内容(profile+resources+filters);
什么意思?可能比较抽象,别捉急,我们一个一个演示。哦对了,先放一张项目结构图尝尝鲜(为了结构更清晰,我把单元测试的包删了):
4.1 生成不同配置文件
本实例达到的效果是:根据不同的环境,动态打包生成不同环境下的 db.properties 文件。
(1)在pom.xml中的project
节点下配置profile
<profiles>
<!-- 开发 -->
<profile>
<!-- profile的id -->
<id>dev</id>
<properties>
<!-- 此处的jastar.env可以自定义,其他地方可以使用${jastar.env}来引用此属性 -->
<jastar.env>dev</jastar.env>
</properties>
<activation>
<!-- 默认激活此配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试 -->
<profile>
<id>test</id>
<properties>
<jastar.env>test</jastar.env>
</properties>
</profile>
<!-- 生产 -->
<profile>
<id>prd</id>
<properties>
<jastar.env>prd</jastar.env>
</properties>
</profile>
</profiles>
(2)建立三种环境的资源文件夹,如下:
src/main/filters/dev
src/main/filters/test
src/main/filters/prd