在开发过程中经常要遇到为不同的环境打包,这里面最主要的问题在于,不同环境的配置是不一样的,如果为不同环境打包每次都手工修改配置,那不但工作量大,而且很容易出错。如果用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配置话在父工程中,那样子工程都不用重新配置了。