Maven采用filter方式多环境配置实战

Maven采用filter方式多环境配置实战

1597发表于2017-12-21

我们在实际开发项目的时候经常会遇到各种环境下打包,其中一般都会有至少三种开会环境,测试环境,生产环境。如果你只有一个配置文件,每次打包都要手动修改,这是最笨也是最不明智的办法。
下面我来给大家介绍采用maven的filters来减少工作量,本例假设有两个环境,开会环境和生产环境。 分别有两个filter文件


pom.xml文件的build下面加入以下内容:  

<filters> 
	<filter>src/main/filters/filter-${env}.properties</filter> 
</filters> 
<resources> 
	<resource> 
		<directory>src/main/resources</directory> 
		<filtering>true</filtering> 
	</resource>    
</resources> 
上述配置表示要对src/main/resources下的资源进行过滤替换,过滤时采用的过滤文件为src/main/filters/filter-${env}.properties文件,其中${env}是一个变量,表示当前使用的环境,这是通过在pom文件中通过profile定义的,如下所示:
<profiles>
	<!-- 开发主环境 -->
	<profile>
		<id>dev</id>
		<!-- 默认生效 -->
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<properties>
			<!-- 配置文件 -->
			<env>dev</env>
		</properties>
	</profile>
	
	<!-- 生产环境 -->
	<profile>
		<id>product</id>
		<properties>
			<!-- 配置文件 -->
			<env>product</env>
		</properties>
	</profile>
</profiles>

这样在开发时就不用每次指定这个值,因为activeByDefault为true,没有指定会取结点dev来替换。

在测试和部署上线时分别通过-P传入当前的profile id,这样maven就会将env变量设置为对应的值,从而导致使用不同的filter文件来对resources下的文件进行过滤替换。 


例如:当调用mvn package时传入-Pdev(因为我们将dev设置为默认,所以也可以不传)参数,则会使用 
filter-dev.properties中的内容来替换resources目录中的配置文件,具体到我们的项目就是db.properties,内容如下: 
....... 
jdbc.connection.url=${xiangmu.jdbc.url} 
jdbc.connection.username=${xiangmu.jdbc.username} 
jdbc.connection.password=${xiangmu.jdbc.password} 
............... 
filter-dev.properties文件内容如下: 
................ 
xiangmu.jdbc.url=jdbc:mysql://localhost:3306/xiangmu?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 
xiangmu.jdbc.username=root 
xiangmu.jdbc.password=abcdefg 
................. 
这样在编译结束后 
db.properties的内容就会变为: 
jdbc.connection.url=jdbc:mysql://localhost:3306/xiangmu?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 
jdbc.connection.username=root 
jdbc.connection.password=abcdefg

参考:

http://blog.csdn.net/kangojian/article/details/6733006

小编蓝狐