Maven实现多环境打包

  在开发的过程当中,常常须要面对不一样的运行环境(开发环境、测试环境、生产环境、内网环境、外网环境等等),在不一样的环境中,相关的配置通常不同,好比数据源配置、日志文件配置、以及一些软件运行过程当中的基本配置。每次在不一样环境部署程序时,都须要修改相应的配置文件,使之完成环境的配置。这么作存在一个比较大的问题:每次修改配置很是麻烦,并且配置错误会产生不可预估的影响,好比,在发布生产环境时用的开发环境的配置还好,但若是在开发环境下用生产环境的数据,将会形成生产数据的污染,致使生产环境崩溃。
    目前JAVA相关的项目基本都是使用Maven来进行构建。在maven中实现多环境的构建可移植性须要使用profile,经过不一样的环境激活不一样的profile来达到构建的可移植性。

1、POM中profile的配置

首先是profile配置,在pom.xml中添加以下profile的配置:spring

<profiles>
    <profile>
        <!-- 本地开发环境 -->
        <id>development</id>
        <properties>
            <profiles.active>development</profiles.active>
            <deploy.url>http://host:port/manager/text</deploy.url>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <!-- 测试环境 -->
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
            <deploy.url>http://host:port/manager/text</deploy.url>
        </properties>
    </profile>
    <profile>
        <!-- 生产环境 -->
        <id>production</id>
        <properties>
            <profiles.active>production</profiles.active>
            <deploy.url>http://host:port/manager/text</deploy.url>
        </properties>
    </profile>
</profiles>

这里定义了三个环境,分别是development(开发环境)、test(测试环境)、production(生产环境),其中开发环境是默认激活的(activeByDefault为true),这样若是在不指定profile时默认是开发环境。tomcat

同时每一个profile还定义了两个属性,其中profiles.active表示被激活的profile的名称,deploy.url表示发布服务器的地址。咱们须要在下面使用到这两个属性。服务器

另外host和port分别是发布服务器的主机地址和端口号app

2、配置文件

针对不一样的环境,咱们定义不一样的配置文件,而这些配置文件都作为资源文件放到maven工程的resources目录下,即src/main/resources目录下,且各个环境的配置分别放到相应的目录下,而全部环境都公用的配置,直接放到src/main/resources目录下便可。以下图所示:
eclipse

 

如图所示,开发环境、测试环境、生产环境的配置文件分别放到src/main/resources目录下的development、test、production三个子目录中,而全部环境都公用的配置文件spring-applicationContext.xml直接放到src/main/resources目录下。其中jdbc.properties配置数据源、logback.xml配置日志。maven

3、maven资源插件配置

在pom中的build节点下,配置资源文件的位置,以下所示:测试

<build>  
    <resources>  
        <resource>  
            <directory>src/main/resources</directory>  
            <!-- 资源根目录排除各环境的配置,使用单独的资源目录来指定 -->  
            <excludes>  
                <exclude>test/*</exclude>  
                <exclude>production/*</exclude>  
                <exclude>development/*</exclude>  
            </excludes>  
        </resource>  
        <resource>  
            <directory>src/main/resources/${profiles.active}</directory>  
        </resource>  
    </resources>  
</build> 

首先第一个资源文件位置src/main/resources须要排队提各个环境的配置文件,各个环境的配置咱们在第二个<resource>节点中经过前面在profile中配置的profiles.active属性来指定。ui

即src/main/resources/${profiles.active}。这样在激活指定的profile时,会加载指定目录下的配置文件,如当前激活的是production profile,那么这个资源目录就是src/main/resources/production。url

这样就达到了不一样环境加载不一样配置的目的。spa

4、配置tomcat-maven-plugin插件

<plugin>  
    <groupId>org.codehaus.mojo</groupId>  
    <artifactId>tomcat-maven-plugin</artifactId>  
    <version>1.2-SNAPSHOT</version>  
    <configuration>  
        <url>${deploy.url}</url>  
        <server>tomcat</server>  
        <path>/appcontext</path>  
    </configuration>  
</plugin>  

其中发布的<url>节点就是在前面profile中配置的deploy.url属性,这样不一样的环境就指定了不一样的发布地址。

<server>和<path>节点分别是发布服务器的用户配置的id以及应用的context名称。

5、构建或发布

全部须要的配置就完成了,下面是见证奇迹的时候了。经过在运行maven命令时指定不一样的profile便可构建不一样环境须要的war包或发布到不一样的环境了 。如:

mvn clean package -Pproduction即构建出生产环境须要的war包

mvn tomcat:redeploy -Ptest 即发布到测试环境

 

因为默认的profile是development,因此若是咱们不指定profile,那么加载就是开发环境deployment下的配置文件了。即咱们在本地开发测试时,不用关心profile的问题。

并且本地开发时在eclipse中使用tomcat插件来进行热部署时也不须要额外的配置。真正的作到了根据不一样环境来自动切换,便可移植的构建。

 

 

另外,在进行持续集成时,使用Jenkins集成maven一样是很是很是方便的。

相关文章
相关标签/搜索