maven环境隔离


引言

在Maven项目开发中,一般都会有四种环境情形: 

1. 本地环境(Local) 
2. 开发环境(Dev) 
3. 测试环境(Beta) 
4. 发布环境(Prod)

 
在不同环境中,总会遇到FTP服务器配置不一样,数据库配置不一样等一系列问题,这样Maven的环境隔离将有助于我们轻松切换不同配置环境。

配置预览

maven环境隔离解决的实际问题

  • 避免人工修改犯错(忘了修改线上、线下地址)
  • 轻松分环境编译、打包、部署

maven环境隔离的配置及原理

pom.xml 中 build节点上增加如下配置

<resources>
    <resource> 
    <directory>src/main/resourcesdirectory>  
    <filtering>truefiltering>
    <excludes>
        <exclude>application-local.propertiesexclude>
        <exclude>application-dev.propertiesexclude>
        <exclude>application-prod.propertiesexclude>
        <exclude>application-test.propertiesexclude>
    excludes>
    resource>

    <resource> 
    <directory>src/main/resourcesdirectory>  
    <filtering>truefiltering>
    <includes>
        <include>application-${activatedProperties}.propertiesinclude>
        <include>application.propertiesinclude>
    includes>
    resource>
resources>

其中 ${activatedProperties} 对应下述配置节点中的  activatedProperties 属性值

接着在 pom.xml 中增加 profiles 节点

    <profiles>
        <profile>
            <id>localid>
            <properties> 
                <activatedProperties>localactivatedProperties>
            properties>
            <activation> 
                <activeByDefault>trueactiveByDefault>
            activation>
        profile>
        <profile>
            <id>devid>
            <properties> 
                <activatedProperties>devactivatedProperties>
            properties>
        profile>
        <profile>
            <id>testid>
            <properties>
                <activatedProperties>testactivatedProperties>
            properties>
        profile>
        <profile>
            <id>prodid>
            <properties>
                <activatedProperties>prodactivatedProperties>
            properties>
        profile>
    profiles>

其中 activeByDefault 是设置默认环境

最后在 application.properties 中配置 @activatedProperties@

spring.profiles.active=@activatedProperties@

配置完成后可以在 idea右侧的 Maven Projects 中就可以看到环境已经生成了并默认 local环境

一个简单的环境隔离就OK了。

测试:

目前我们选择 prod 环境,把项目运行起来, 看到 【target -> classes】 是我们设置的prod环境 application-prod.properties