博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
利用Profile构建不同环境的部署包
maven 根据P参数值打包动态修改properties文件中值或一定properties
Maven插件maven-antrun-plugin的使用
maven学习(下)利用Profile构建不同环境的部署包
项目开发好以后,通常要在多个环境部署,比如常用的:本机环境(local)、(开发小组内自测的)开发环境(dev)、(提供给测试团队的)测试环境(test)、预发布环境(pre)、正式生产环境(prod),每种环境都有各自的配置参数,比如:数据库连接、远程调用的ws地址等等。如果每个环境build前手动修改这些参数,显然太不方便,所以希望打包的时候 根据不同的环境来动态使用不同环境properties文件 或者动态修改properties参数值。
方法一 :具体参数使用${key}占位符方式打包替换
如下图,有uat这套环境配置,然后配置文件中的配置参数用${key}的方式赋值。
然后,在maven的pom中指定每套环境的参数值,对应上面配置文件中的${key}
完整的profile如下格式:
参数配置部分:
我们还要启动resources的filter过滤器(这一步是必须的):
按照上述配置后,我们执行maven打包操作后:
我们可以看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替换到指定环境的参数了
方式二 : 将指定环境下的*.properties文件都移动到classes下(替换/移动)
由于 有些系统会在项目中的resources下指定各套环境配置文件,如下图片:
但是我们打包后 只希望将指定环境下的*.properties文件都移动到classes下,所以可以考虑该方法,即使用使用maven-antrun-plugin插件方式实现。
新版本的Maven本身自带该插件,所以不用在pom文件中进行配置,而idea这种里面自带的Maven,则需要在pom文件中手动配置
参数值准备
增加一个plugin 为maven-antrun-plugin
解释:
<phase> <!-- Maven的生命周期阶段 -->
<id>profile为唯一的标识
然后命令打包:
mvn install -Pdev
去指定target目录中可以看到打包的项目中已经将这几个*.properties移动到classes下了。
有的时候 我们想通过动态打包,生成的工程的名字是带各套环境, 比如:clover-core-dev-1.0.jar
<finalName>clover-core-${clover.version}</finalName> --这个就是工程clover-core打包最终名
<version>${clover.version}</version> ---这个将会打包后,deploy(部署在)中央私库后最终的version
Ps:
- 在maven里,如果一个依赖项的scope是provided,表示由容器提供,打包时将不会打包进最终的package里,所以这样配置后,生产环境打包时,依赖项的scope全变成了provided,即不打包进war文件,而本机环境下,因为scope是compile,所以会打包到war里