当前位置: 首页 > news >正文

Maven部署打包多环境(开发、测试、生产)配置教程

Maven打包多环境(开发、测试、生产)配置教程

  • 1、多环境配置的必要性
    • 1.1 没有进行多环境配置进行的操作复杂性
    • 1.2 不影响运行时配置
  • 2、配置方案
    • 2.1 添加profile属性
    • 2.1 添加两个插件
    • 2.3 主配置文件中添加插值变量
  • 3、效果展示
    • 3.1 勾选`prod`环境
    • 3.2 控制台输出结果

1、多环境配置的必要性

1.1 没有进行多环境配置进行的操作复杂性

  1. 配置重复:在每个环境(开发、测试、生产)中,可能需要使用相同的插件、依赖和配置项。这样会导致在每个环境中进行重复的配置。
  2. 环境特定配置:某些配置项可能仅适用于特定环境(例如,数据库连接信息、文件路径等)。如果不进行多环境配置,这些特定于环境的配置项可能会被错误地应用到其他环境。
  3. 构建过程复杂化:由于没有将不同环境的配置分离,开发人员可能需要在每个环境中手动执行一系列配置和构建操作。这样会导致构建过程变得复杂且容易出错。
  4. 维护困难:当项目需要调整配置以适应新环境时,需要在每个环境配置文件中进行相应的修改。这将导致配置文件的维护变得困难且容易出错。

1.2 不影响运行时配置

执行多环境自动化配置后,不会影响我们再IDEA上直接执行RUN操作,此时,主文件的配置会被下图配置替换。
在这里插入图片描述

2、配置方案

2.1 添加profile属性

请注意下属性片段中的注释。

<profiles><profile><!--不同环境Profile的唯一id--><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><!--environment是自定义的字段(名字随便起),自定义字段可以有多个,确保与配置文件一致--><environment>dev</environment></properties></profile><profile><id>prod</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>prod</environment></properties></profile><profile><id>test</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>test</environment></properties></profile></profiles>

完成该属性的增加后,Profiles菜单下就出现三个自定义的环境,如下图所示默认激活的是dev环境。

在这里插入图片描述

2.1 添加两个插件

  1. maven-resources-plugin
    用于将资源配置文件中的动态变量进行替换。

  2. maven-antrun-plugin
    用于追加自定义日志消息,在打包时候,在程序执行完毕后控制台打印这是构建哪个环境的日志,使得打包的环境一目了然,避免出现打包错误,导致打包时使用了一个环境的配置,部署时环境搞错了。
    其中 <echo message="[INFO] ${environment} 环境打包执行成功"/>就引用了environment属性。

    <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>default-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>target/classes</outputDirectory><useDefaultDelimiters>false</useDefaultDelimiters><delimiters><delimiter>@</delimiter></delimiters><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources/</directory><filtering>true</filtering><includes><include>**/*.yml</include></includes></resource><resource><directory>src/main/resources/</directory><excludes><exclude>**/*.yml</exclude></excludes></resource></resources></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.3</version><executions><execution><id>print-custom-info</id><phase>package</phase><configuration><tasks><echo message="[INFO] ${environment} 环境打包执行成功"/></tasks></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins>

2.3 主配置文件中添加插值变量

在这里插入图片描述
请注意:主配置文件中引用的环境变量使用两个@,有的是${},这个可以在2.1中的插件进行配置。

<delimiters><delimiter>@</delimiter>
</delimiters>

3、效果展示

3.1 勾选prod环境

在这里插入图片描述

3.2 控制台输出结果

在这里插入图片描述

http://www.lryc.cn/news/163464.html

相关文章:

  • 【计算思维题】少儿编程 蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套
  • 【Hello Algorithm】贪心算法
  • TOP-K问题
  • 【保姆级从0到1】UE5 蓝图入门教程1:关卡、蓝图入门
  • 【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》
  • redis 报错 Redis protected-mode 配置文件没有真正启动
  • 解决a标签内容中img标签和p标签垂直方向间隔太大的问题
  • 如何选择靠谱的全景平台?VR全景加盟从哪方面对比?
  • CentOS系统环境搭建(十八)——CentOS7安装Docker20.10.12和docker compose v2
  • NebulaGrap入门介绍和集群安装部署
  • thinkphp5.0 composer 安装oss提示php版本异常
  • AList dokcer安装及百度网盘挂载
  • whereIn 遇到了最大限制,临时表处理方式
  • 基于SSM的校园快递代取系统设计与实现
  • MySQL事务详细讲解
  • [linux] mmcv-full 安装的时候 Building wheel 卡住
  • Python怎么实现更高效的数据结构和算法? - 易智编译EaseEditing
  • 03-zookeeper节点动态上下线案例
  • 如何使用TensorFlow完成线性回归
  • @controller和@RestController的区别
  • GeoNet: Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose 论文阅读
  • 蓝桥杯官网填空题(振兴中华)
  • node基础之七:Mongodb 数据库
  • 基于Python和mysql开发的智慧校园答题考试系统(源码+数据库+程序配置说明书+程序使用说明书)
  • OPPO/真我手机ColorOS13系统解账户锁-移除手机密码图案锁方法
  • 阿里云大数据实战记录9:MaxCompute RAM 用户与授权
  • JavaScript基础07——变量拓展-数组
  • go-zerogo web集成redis实战
  • 油猴浏览器(安卓)
  • Redis 6.0多线程模型比单线程优化在哪里了