在開發過程中經常要遇到為不同的環境打包,這里面最主要的問題在於,不同環境的配置是不一樣的,如果為不同環境打包每次都手工修改配置,那不但工作量大,而且很容易出錯。如果用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配置話在父工程中,那樣子工程都不用重新配置了。