利用maven-resource-plugin插件进行打包时不同环境下的配置文件切换

时间:2024-03-18 13:56:42

基本概念说明(resources、filter和profile): 
1.profiles定义了各个环境的变量id 
2.filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profile中定义的值 
3.resources中是定义哪些目录下的文件会被配置文件中定义的变量替换,一般我们会把项目的配置文件放在src/main/resources下,像db,bean等,里面用到的变量在打包时就会根据filter中的变量配置替换成固定值 
          在我们平常的java开发中,会经常使用到很多配制文件(xxx.properties,xxx.xml),而当我们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,需要不停的去修改这些配制文件,次数一多,相当麻烦。现在,利用maven的filter和profile功能,我们可实现在编译阶段简单的指定一个参数就能切换配制,提高效率,还不容易出错,详解如下。 
 

原理:
    利用filter实现对资源文件(resouces)过滤 
maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件中的username=${key}替换成username=value 
    利用profile来切换环境 
maven profile可使用操作系统信息,jdk信息,文件是否存在,属性值等作为依据,来**相应的profile,也可在编译阶段,通过mvn命令加参数 -PprofileId 来手工**使用对应的profile 
结合filter和profile,我们就可以方便的在不同环境下使用不同的配制 

打包替换文件配置:

如图配置

利用maven-resource-plugin插件进行打包时不同环境下的配置文件切换

1:指生产环境下的配置

2:指开发环境下的配置

在pom.xml下的配置如下:

  <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--配置数据源切换-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                                          <!-- 覆盖原有文件 -->
                             <overwrite>true</overwrite>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <!-- 也可以用下面这样的方式(指定相对url的方式指定outputDirectory) <outputDirectory>target/classes</outputDirectory> -->
                            <!-- 待处理的资源定义 -->
                            <resources>
                                <resource>
                                    <!-- 指定resources插件处理哪个目录下的资源文件 -->
                                    <directory>src/main/resources/${package.environment}</directory>
                                    <filtering>false</filtering>
                                </resource>
                            </resources>
                        </configuration>
                        <inherited></inherited>
                    </execution>
                </executions>
            </plugin>
        </plugins>
<profile>
            <id>oracle-47</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <package.environment>dev</package.environment>
                  <jdbc.url><![CDATA[jdbc:oracle:thin:@10.xxx.xxx.47:1521:orcl]]></jdbc.url>
                 <jdbc.username>xxx</jdbc.username>
                 <jdbc.password>xxx</jdbc.password>
                <jdbc.driver.name>oracle.jdbc.driver.OracleDriver</jdbc.driver.name>
                <druid.initialSize>1</druid.initialSize>
                <druid.minIdle>1</druid.minIdle>
                <druid.maxActive>20</druid.maxActive>
                <druid.maxWait>6000</druid.maxWait>
                <druid.timeBetweenEvictionRunsMillis>6000</druid.timeBetweenEvictionRunsMillis>
                <druid.minEvictableIdleTimeMillis>300000</druid.minEvictableIdleTimeMillis>
                <druid.maxPoolPreparedStatementPerConnectionSize>20</druid.maxPoolPreparedStatementPerConnectionSize>

                <mybatis.dialect>oracle</mybatis.dialect>
                <mybatis.mapperLocations>classpath*:/mappings/oracle/**/*Mapper.xml
                </mybatis.mapperLocations>
            </properties>
        </profile>

<profile>
            <id>prd</id>
            <properties>
                <package.environment>prd</package.environment>
            </properties>
        </profile>

打包:

在使用maven打包时,测试环境的打包

mvn -insall 

正式环境打包

mvn -install -Pprd 进行打包时会将带替换文件替换掉指定目录下的文件

打包排除文件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <warSourceExcludes>WEB-INF/xxx.jsp</warSourceExcludes>
    </configuration>
</plugin>