基本概念说明(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,我们就可以方便的在不同环境下使用不同的配制
打包替换文件配置:
如图配置
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>