【07】Maven项目多环境打包配置

news/2024/11/12 16:24:43/

(1)Web项目使用Maven进行多模块划分开发之后,面临一个问题,即如何加载不同环境的配置文件打包发布到不同的环境中?
(2)不同的环境有开发环境、测试环境、线上生产环境等。
(3)本文将围绕这一主题给出具体的实现方案

Maven项目多环境打包配置

文章目录

  • Maven项目多环境打包配置
    • 1.解决思路
    • 2.具体实现
      • 2.1告诉Maven我们有哪些环境,现在默认使用哪个环境
      • 2.2准备好各个环境的备置文件
      • 2.3告诉Maven具体环境的配置文件在哪里
      • 2.4见证奇迹的时刻
    • 3.这种方案的好处
    • 4.Maven项目一键热部署配置

本尊

1.解决思路

(1)首先我们要明确一点,即我们的需求是如果需要打开发环境的包,就只选取开发环境的配置文件,如果需要打测试环境的包,就只选取测试环境的配置文件,如果需要打线上生产环境的包,就只选取线上生产环境的配置文件。这件事情交给Maven帮我们干,但我们得告诉Maven怎么干。

(2)还要明确一条主线,我们是拿具体环境配置文件中的属性值赋给项目中配置占位符的地方。这个所谓的地方,可能是spring的配置文件,也可能是其他需要引用配置文件属性值的地方。总的来说,就是要完成具体环境配置文件的属性值给占位符赋上值。这件事情也得告诉Maven帮我们干。

2.具体实现

2.1告诉Maven我们有哪些环境,现在默认使用哪个环境

  <!--5.创建多环境5.1适适多种多样的环境,让环境能够做多环境的区分,需要做两件事(1)定义出多环境(2)使用某一种环境--><profiles><!--5.1.1定义具体的环境:开发环境--><profile><id>dev</id><properties><env>dev</env><remote_tomcat_server>http://192.168.10.8:8080/manager/text</remote_tomcat_server><server_name>tomcat9</server_name><tomcat_username>admin</tomcat_username><tomcat_password>1234</tomcat_password><tomcat_context_path>/gengducun</tomcat_context_path></properties><!--(1)设置默认使用 开发环境 的配置文件--><activation><activeByDefault>true</activeByDefault></activation></profile><!--5.1.2定义具体的环境:测试环境--><profile><id>test</id><properties><env>test</env><remote_tomcat_server>http://192.168.10.6:8080/manager/text</remote_tomcat_server><server_name>tomcat9</server_name><tomcat_username>admin</tomcat_username><tomcat_password>1234</tomcat_password><tomcat_context_path>/gengducun</tomcat_context_path></properties></profile><!--5.1.3定义具体的环境:线上环境--><profile><id>pro</id><properties><env>pro</env><remote_tomcat_server>http://www.gengducun.com/manager/text</remote_tomcat_server><server_name>tomcat9</server_name><tomcat_username>admin</tomcat_username><tomcat_password>1234</tomcat_password><tomcat_context_path>/gengducun</tomcat_context_path></properties></profile></profiles>

2.2准备好各个环境的备置文件

(1)目录结构如下:
在这里插入图片描述

(2)具体环境具体配置文件的内容举例

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.10.8:3306/gdc
jdbc.username=yourname
jdbc.password=yourpwd

(3)有占位符的配置文件(图上面放在最外层的db.properties)

jdbc.driver=${jdbc.driver}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}

(4)spring具体引用的地方(引用的是放在最外层的db.properties的值)
在这里插入图片描述

2.3告诉Maven具体环境的配置文件在哪里

(1)在2.1中已经告诉Maven根据哪个环境去找配置文件
(2)当前这一步就是告诉Maven从哪个地方去找配置文件
主要靠以下这段搞定:

<resource><directory>${project.basedir}/src/main/resources/env/${env}</directory><includes><include>*/*.xml</include><include>*/*.properties</include><include>**.xml</include><include>**.properties</include></includes><filtering>true</filtering>
</resource>

a. p r o j e c t . b a s e d i r / s r c / m a i n / r e s o u r c e s / e n v / {project.basedir}/src/main/resources/env/ project.basedir/src/main/resources/env/{env}:这个意思翻译一下,就是到项目的资源文件夹resources/env/具体环境配置文件夹下去找。${env}引用的是我们具体的环境,例如去dev开发环境文件夹中去找配置文件。
b.include标签说明的是我们要找的资源文件包含哪些文件类型,用通配符表示的字符串值,是用来去匹配资源文件的,只要能匹配上的都算数。

(3)找到具体的配置文件之后,去把有占位符引用的配置文件填充上值。主要靠这句:

<filtering>true</filtering>

至此就完成了将配置文件的具体值,填充到有占位符引用的配置文件中。

(4)贴一下我的完整配置

<build><!--9.开启目录过滤(1)只有开启了目录过滤,才可以将具体环境的properties配置的值注入到相关的属性文件中--><resources><!--9.1指定资源文件的目录,目前配置表示的是src/main/java目录下的xml文件和properties文件--><resource><directory>${project.basedir}/src/main/java</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><!--对占位符属性文件属性值进行赋值--><filtering>true</filtering></resource><!--9.2指定资源文件的目录,当前配置表示的是所有模块的src/main/resources目录下的xml文件和properties文件--><resource><directory>${project.basedir}/src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><!--对占位符属性文件属性值进行赋值--><filtering>true</filtering></resource><!--9.3指定资源文件的目录,当前配置表示的是所有模块的src/main/resources/env/具体环境目录中的xml文件和properties文件--><resource><directory>${project.basedir}/src/main/resources/env/${env}</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><!--对占位符属性文件属性值进行赋值--><filtering>true</filtering></resource></resources><testResources><testResource><!--指定测试资源文件的目录--><directory>${project.basedir}/src/test/resources</directory><!--参与过滤--><!--<filtering>false</filtering>--></testResource></testResources></build>

2.4见证奇迹的时刻

在这里插入图片描述

(1)勾选一个环境,点击install,去查看Maven自动生成的文件中有占位符的文件是否被填充上值了。

在这里插入图片描述

3.这种方案的好处

(1)便于对属性文件值分环境管理,不会把pom.xml文件搞得太拥挤。
(2)对于后续在java代码中读取具体环境(开发、测试或线上)属性文件的值打下了良好的基础。比如说读取图片上传服务器的路径,文件存储服务器的路径等等。

在这里插入图片描述

在这里插入图片描述

4.Maven项目一键热部署配置

    <!--8.插件统一管理,在子模块中去引用--><pluginManagement><plugins><!--8.1tomcat插件一键热部署Maven项目到多个远程服务器--><plugin><!--8.1.1tomcat插件的坐标--><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--8.1.2maven项目热部署到远程tomcat服务器的配置,以下配置均是给Maven自己看的--><configuration><!--(1)远程tomcat服务器Manager App管理页面的请求路径--><url>${remote_tomcat_server}</url><!--(2)访问远程服务器tomcat的web项目的用户名与密码,这里的tomcat的Web项目,指的是有Manager App管理页的那个Web项目--><server>${server_name}</server><username>${tomcat_username}</username><password>${tomcat_password}</password><!--(3)发布的上下文访问路径,与tomcat管理目录中的路径对应,/表示发布到根目录--><path>${tomcat_context_path}</path><!--<update>true</update>会将发布目录下的数据清空--><update>true</update></configuration></plugin></plugins></pluginManagement>

http://www.ppmy.cn/news/1545754.html

相关文章

Flutter鸿蒙next 中的 Expanded 和 Flexible 使用技巧详解

在 Flutter 开发中&#xff0c;Expanded 和 Flexible 是两个非常常用的布局控件&#xff0c;它们可以帮助开发者更加灵活地管理 UI 布局的空间分配。虽然它们看起来非常相似&#xff0c;但它们的功能和使用场景有所不同。理解这两者的区别&#xff0c;能帮助你在构建复杂 UI 布…

PDF生成:全面解析,C# 如何使用iTextSharp库(或其他类似库)生成PDF文档,包括如何将位图图像嵌入PDF中。

一、概述 PDF&#xff08;Portable Document Format&#xff09;是一种广泛使用的文档格式&#xff0c;由Adobe公司在1993年推出。PDF的目标是能够在任何设备上呈现固定格式的文档&#xff0c;无论是在不同的操作系统、硬件设备&#xff0c;还是在打印时&#xff0c;都能保证文…

前端开发中如何在页面加载时自动读取并转换指定的 .docx 文件

前端开发中如何在页面加载时自动读取并转换指定的 .docx 文件&#xff0c;并实现在线预览功能。我在这里分享通过 mammoth.min.js 插件来实现docx在线预览功能 第1&#xff1a;下载地址&#xff0c;大家可以任意选取下面其中一种方式下载 (1)GitHub - mwilliamson/mammoth.js: …

华为HarmonyOS打造开放合规的广告生态 - Banner广告

场景介绍 Banner广告是在应用程序顶部、中部或底部占据一个位置的矩形图片&#xff0c;广告内容每隔一段时间会自动刷新。 接口说明 接口名 描述 AutoAdComponent(adParam: advertising.AdRequestParams, adOptions: advertising.AdOptions, displayOptions: advertising.Ad…

spark的学习-03

RDD的创建的两种方式&#xff1a; 方式一&#xff1a;并行化一个已存在的集合 方法&#xff1a;parallelize 并行的意思 将一个集合转换为RDD 方式二&#xff1a;读取外部共享存储系统 方法&#xff1a;textFile、wholeTextFile、newAPIHadoopRDD等 读取外部存储系统的数…

【求职】个人介绍

写这个主要原因想让别人了解你吧&#xff0c;工作跟恋爱一样喜欢才能好好去做&#xff0c;不然都是痛苦。最后可能钱没挣到还有一身病。我也面试很多人&#xff0c;面试最大痛点就是无法短时间内了解对方&#xff0c;面试者自己不说&#xff0c;我如果问不到对方优势&#xff0…

Python调用苏信通接口发送短信

毫无征兆的情况下&#xff0c;业务经理通知我&#xff0c;融合云信下架了&#xff0c;当时心里就是一段五味陈杂啊&#xff0c;关键咱也没得选啊&#xff0c;看来接口是要重新开发了。好在业务经理又推荐了苏信通&#xff0c;登录了UI之后&#xff0c;返现功能对比融合云信少了…

【go从零单排】泛型(Generics)、链表

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在Go语言中&#xff0c;泛型&#xff08;Generics&#xff09;允许你编写可以处理…