在我们平时学习或进行一些项目的练习时,经常会使用到Maven来作为项目的管理工具。但是我们可能很少会用到Maven的环境隔离,甚至没有了解过环境隔离,这是因为我们进行这种本地开发时几乎是不需要使用到环境隔离的。而在实际的项目环境中则不一样,在实际的项目开发中会有多个环境,不同的环境都存在一定的差异,为了让这些环境之间互不影响,所以需要用到Maven的环境隔离将不同的环境隔离开。

实际的项目环境:

  • 本地开发环境(Local)
  • 开发环境(Dev)
  • 测试环境(Beta)
  • 线上生产环境(Prod)

隔离环境之间各种配置可能存在的一些常见差异:

  • FTP服务器相关的配置信息不一样
  • 数据库配置不一样
  • 支付接口不一样,例如支付宝分沙箱环境和真实环境
  • 框架配置文件不一样,例如日志的输出路径等等
  • ......

Maven环境隔离解决的实际问题:

  • 避免人工修改的弊端,即人为修改容易犯错
  • 轻松分环境编译、打包、部署等等
  • ......

Maven环境隔离配置:

  • 在pom.xml中的build节点里增加如下内容(根据实际的项目情况进行配置):
<!-- 加载资源文件的配置 -->
<resources>
    <resource>
        <!-- 指定配置文件所在的目录,${deploy.type}是一个参数变量,通过这个变量来决定加载哪个环境的配置文件 -->
        <directory>src/main/resources.${deploy.type}</directory>
        <!-- 排除.jsp文件,也就是不加载.jsp文件 -->
        <excludes>
            <exclude>*.jsp</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>
  • 在pom.xml中增加profiles节点,如下:
<profiles>
    <!-- 开发环境 -->
    <profile>
        <id>dev</id>
        <activation>
            <!-- 表示如果编译时没有指定环境,则以该环境为默认环境 -->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <deploy.type>dev</deploy.type>
        </properties>
    </profile>
    <!-- 测试环境 -->
    <profile>
        <id>beta</id>
        <properties>
            <deploy.type>beta</deploy.type>
        </properties>
    </profile>
    <!-- 生产环境 -->
    <profile>
        <id>prod</id>
        <properties>
            <deploy.type>prod</deploy.type>
        </properties>
    </profile>
</profiles>

Maven环境隔离-资源文件目录初始化:

  • 新建与环境对应的文件夹,并把要隔离的文件分开,公共的则留下。例如:
    Maven环境隔离

Maven环境隔离-IDEA中设置默认环境:

  • 在IDEA右侧的Maven Projects界面里,选中在IDEA中进行本地开发时所对应的环境。如果选中之后可能会提示 ”Maven project need to be imported“ ,这时点击import change进行更新即可。如下:
    Maven环境隔离

因为我们在IDEA运行Tomcat的时候会发布war包,而这个打包过程使用什么环境,就是在这里配置的,所以我们才要在IDEA中设置一个默认的环境。

注:不要多选,多选环境可能会造成环境错乱。

Maven环境隔离-编译打包命令:

  • 在我们手动使用maven的命令进行编译打包的时候,需要在命令的末尾增加一个参数,参数是-P${环境标识},例如:
mvn clean package -Dmaven.test.skip=true -Pdev   # 开发环境的打包命令
mvn clean package -Dmaven.test.skip=true -Pbeta  # 测试环境的打包命令
mvn clean package -Dmaven.test.skip=true -Pprod  # 生产环境的打包命令

Maven环境隔离验证:

  • 首先在某个配置文件中写上对应环境的标识,然后通过分环境编译打包,也就是使用不同的命令参数进行打包,打包成功后查看不同环境下的配置文件来进行验证。我这里进行了开发环境的打包,并且打包成功。如下:

Maven环境隔离

打包完成后,我们可以到target下的classes目录中,查看我们的配置文件是否为开发环境的配置文件。如下:
Maven环境隔离

然后我们再来进行测试环境的打包,打包完成后,也是查看我们的配置文件是否为测试环境的配置文件。如下:
Maven环境隔离

至此,我们就完成了Maven环境隔离的配置及打包验证,这样当我们使用不同的命令参数进行编译打包,就能达到一个环境隔离的作用。由于隔离了环境,我们在开发完项目进行打包上线的时候,就不需要再手动地去修改配置文件了,减去了不少麻烦。