Maven War项目怎么根据不同环境进行资源过滤
前提:
标准的Maven Web工程,使用jetty插入调试,配置项都在WEB-INF/config下;
需求:
有多个环境(开发、单元测试、联调、ST、UAT、生产),每个环境的配置项可能不多,希望在打WAR包的时候,通过简单指定当前环境,就可以根据不同的配置项生成对应的WAR包,即开发的WAR包里的WEB-INF/config下的配置项对应开发的环境,生产的WAR包里的WEB-INF/config下的配置项对应生产的环境,如是而已。
实现步骤:
1、定义多个profile,代表多个环境,其中开发环境默认激活,如下:
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.env>dev</project.env>
</properties>
</profile>
。。。省略部分
<profile>
<id>prd</id>
<properties>
<project.env>prd</project.env>
</properties>
</profile>
</profiles>
2、在src/main/filters下定义不同的配置文件,如
project-dev.properties
...
project-prd.properties
每个配置文件代表一个环境中相同的配置项,格式是符合Java属性文件的KEY/VALUE形式。
3、将项目中和环境有关的配置抽取出来,放到src/main/filters/config下,如
project-spring.xml(其中就有数据库等相关信息)
4、使用maven war插件进行过滤
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeEmptyDirectories>true</includeEmptyDirectories>
<filters>
<filter>src/main/filters/project-${project.env}.properties</filter>
</filters>
<webResources>
<resource>
<directory>src/main/filters/config</directory>
<filtering>true</filtering>
<targetPath>WEB-INF/config</targetPath>
</resource>
</webResources>
<warSourceExcludes>WEB-INF/logs/*.*, **/.bak, **/.log</warSourceExcludes>
</configuration>
</plugin>