Maven为不同环境配置打包

在开发过程中经常要遇到为不同的环境打包,这里面最主要的问题在于,不同环境的配置是不一样的,如果为不同环境打包每次都手工修改配置,那不但工作量大,而且很容易出错。如果用ant的话,用变量加上replace等命令很容易实现不同环境不同配置打包。

在maven中可以用profile+filter实现类似功能,以配置jdbc为例,假设jdbc.properties配置在src/main/resources/ 目录下,需要设置其中"datasource.url"参数

 

一,新建与src同级的filter目录,在目录下为dev,test,local三种环境新建dev.properties,test.properties,local.properties三种过滤文件,里面都设置了各自环境的datasource.url参数;

 

二,修改jdbc.properties的配置为

datasource.url=${datasource.url}

 

三,配置pom文件

<project>
    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <env>local</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <env>test</env>
            </properties>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
        </profile>
    </profiles>
    <build>
        <filters>
            <filter>filter/${env}.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

 

四,打包,如果要打包测试环境的配置的话,就用

"mvn -X clean package -Ptest"

如果要打包成dev环境的包的话,就将-P参数设置为-Pdev,如果不用-P参数的话,默认为local配置。

 

五,注意事项:

1,filter目录最好为src同级目录,如果为src子目录,maven默认会将filter目录下的几个环境配置过滤文件也会打包出去,即上面提到的test.properties,local.properties,dev.properties

2,需要过滤配置的资源目录,要加上<filtering>true</filtering>标签,参见

<resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
      <includes>
          <include>**/*.*</include>
       </includes>
</resource>

 3,可以将profiles配置话在父工程中,那样子工程都不用重新配置了。

posted @ 2015-11-09 12:50  cookiehu  阅读(8162)  评论(0编辑  收藏  举报