生产环境,测试环境,开发环境在不一样的环境下会有各类各样的配置,好比数据库连接地址,帐户名,密码等等.不一样环境下都须要配置,可是配置却又不一样.之前分享过一篇文章,介绍了我以前A公司的差别化配置实现( http://www.cnblogs.com/abcwt112/p/5203348.html 原理就是增长一个classpath目录,把差别化配置都放在这个目录下,而后差别化文件不打包.这样差别化配置就会直接读取自指定的classpath下的文件)..此次我想来分享一下怎么使用maven来实现打差别化的包.html
1.数据库
首先..按照最最最经常使用的配置方法,咱们数据库的配置确定是会写在一个properties文件放在resporces下的.jsp
好比host = 192.168.X.Xmaven
这个时候咱们的具体值不要写死,而是使用占位符的形式,就像Spring的placeholder同样,这个占位符咱们会在maven打包的时候被替换成具体的值.测试
因此host = ${host}ui
2.spa
这个host须要被替换,因此确定要有文件写明具体要被替换成什么值,咱们能够新建2个文件,1个叫test.properties.里面host = test.XXXXX打测试包的时候就用这个值替换配置文件里的host.code
另外1个叫prod.properties,里面host = prod.XXXX.打生产包的时候就用这个值替换配置文件里的host.xml
3.在maven的pom.xml里配置一下htm
1 <profiles> 2 <profile> 3 <id>test</id> 4 <activation> 5 <activeByDefault>true</activeByDefault> 6 </activation> 7 <build> 8 <finalName>test</finalName> 9 <filters> 10 <filter>profiles/test.properties</filter> 11 </filters> 12 <resources> 13 <resource> 14 <directory>src/main/resources</directory> 15 <includes> 16 <include>**/*.*</include> 17 </includes> 18 <filtering>false</filtering> 19 </resource> 20 <resource> 21 <directory>src/main/resources</directory> 22 <includes> 23 <include>param.properties</include> 24 </includes> 25 <filtering>true</filtering> 26 </resource> 27 </resources> 28 </build> 29 </profile> 30 <profile> 31 <id>prod</id> 32 <build> 33 <finalName>prod</finalName> 34 <filters> 35 <filter>profiles/prod.properties</filter> 36 </filters> 37 <resources> 38 <resource> 39 <directory>src/main/resources</directory> 40 <includes> 41 <include>**/*.*</include> 42 </includes> 43 <filtering>false</filtering> 44 </resource> 45 <resource> 46 <directory>src/main/resources</directory> 47 <includes> 48 <include>param.properties</include> 49 </includes> 50 <filtering>true</filtering> 51 </resource> 52 </resources> 53 </build> 54 </profile> 55 </profiles>
这里配置了2个profile.在打包的时候能够选择. 要注意的配置是filter节点,里面指定的是用哪一个文件里的值去替换其余文件.
resource节点下的directory指定了哪一个目录下的文件须要处理.这里我指定了src/main/resources目录.
第一段
40 <includes> 41 <include>**/*.*</include> 42 </includes> 43 <filtering>false</filtering>
指定了这个resources下的全部文件都是须要被打包进去的.文件里的值不须要被替换
第二段
47 <includes> 48 <include>param.properties</include> 49 </includes> 50 <filtering>true</filtering>
指定了param.properties文件是须要被打包的同时这个文件里的值是须要被替换的.
打包的时候使用 -P prod 来指定使用prod这个profile,同理-P test来指定使用test这个profile. 好比 clean package -P prod
filtering为true的resources节点的include必定不要配置错..否则下面的全部文件里的占位符都会被替换..好比你的jsp里的${}也会被替换...因此要替换的文件最好精确写到文件名而不是*.*这样
另外第一个include为**/*.*的resources是要写的.否则除了第二个resources里指定的要被替换的param.properties文件,其余文件都会被过滤不打进包里去.
(2个配置文件里profile节点下的build节点里的配置彻底同样,貌似能够提取出来配置在pom的project节点下的build节点,因此配置可能有不少种,这是一种方式)
最终打包的成果:
这样就可以根据打包时候选择不一样的profile达到差别化配置的方式.达到不一样环境统一打包的效果.