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>

      

你可能感兴趣的:(maven)