在实际项目我们都需要面对不同环境的切换来展现,开发环境,测试环境,上线环境等。以往的部分做法是切换环境时,修改配置再部署。这样做有诸多不便,如可能会修改不全面,改错配置,频繁的切换部署需要专人来处理等等问题。使用maven来管理就不会出现这些问题。maven很好集成开发,测试,部署,发布 一条命令全部处理完成。部署多环境就需要用到过滤机制。
maven过滤机制有二种:1、maven自带的过滤机制,filter和resources; 2、maven-war-plugin插件具有过滤功能,是在build时替换变量值
用dev.properties , test.properties , product.properties分别储存开始,测试,上线环境的信息。
<profiles>
<profile>
<id>test</id>
<properties>
<project.classifier>test</project.classifier>
<project.profile.domain>no300</project.profile.domain>
</properties>
<build>
<filters>
<filter>src/main/resources/filter/local_common.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>dev</id>
<properties>
<project.classifier>dev</project.classifier>
<project.profile.domain>no100</project.profile.domain>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>product</id>
<properties>
<project.classifier>product</project.classifier>
<project.profile.domain>product</project.profile.domain>
</properties>
</profile>
</profiles>
<build>
<finalName>example-maven</finalName>
<filters>
<filter>src/main/resources/filter/common_${project.classifier}.properties</filter>
<filter>src/main/resources/filter/multidomain_${currentDomain}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
上面是自带的过滤机制,用命令 mvn clean package -Ptest 表示打测试环境的包。 这个打包替换有个局限,只替换resource资源文件的占位符,对于在webapp下的jsp等文件并没有起作用。 这时就需要使用第二种过滤机制,maven-war-plugin插件。
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<filters>
<filter>src/main/resources/filter/common_${project.classifier}.properties</filter>
<filter>src/main/resources/filter/multidomain_${currentDomain}.properties</filter>
</filters>
<webResources>
<resource>
<directory>src/main/webapp/WEB-INF</directory>
<filtering>false</filtering>
</resource>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
使用maven-war-plugin插件,需要注意版本。2.2和2.4有很多区别。2.2不使用filters属性也能够替换jsp中的占位变量,但它在copyfile时使用操作系统字符编码,不能外界修改,所以在window下编码的文件会出现中文乱码问题。2.4版本已经处理了中文编码问题,可以通过project.build.sourceEncoding传值UTF-8设置编码,但同时必需显式使用filters属性,而不能用上级全局共用的filters。
群组138919906,大家共同学习进步