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

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

(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>

相关文章:

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

&#xff08;1&#xff09;Web项目使用Maven进行多模块划分开发之后&#xff0c;面临一个问题&#xff0c;即如何加载不同环境的配置文件打包发布到不同的环境中&#xff1f; &#xff08;2&#xff09;不同的环境有开发环境、测试环境、线上生产环境等。 &#xff08;3&#x…...

嵌入式Linux入门具备:C语言基础与基本驱动学习(2):Linux GIibc IO基础

标准IO 标准 I/O 虽然是对文件 I/O 进行了封装&#xff0c;但事实上并不仅仅只是如此&#xff0c;标准 I/O 会处理很多细节&#xff0c;譬如分配 stdio 缓冲区、以优化的块长度执行 I/O 等&#xff0c;这些处理使用户不必担心如何选择使用正确的块长度。I/O 库函数是构建于文件…...

【微服务】Docker 容器化

一、初识Docker 1. 为什么需要 Docker 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会遇到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性的问题开发、测试、生产环境有差异 Docker 如何解决依赖的兼容问题 将应用的Libs&#xff08;…...

[前端] 为网站侧边栏添加搜索引擎模块

前言 最近想给我的个人网站侧边栏添加一个搜索引擎模块&#xff0c;可以引导用户帮助本站SEO优化&#xff08;让用户可以通过点击搜索按钮完成一次对本人网站的搜索&#xff0c;从而实现对网站的搜索引擎优化&#xff09;。 最开始&#xff0c;我只是想实现一个简单的百度搜索…...

解决CORS (跨源资源共享) 错误

问题引入 前端代码 <template><div id"hello-vue" class"demo">{{ message }}</div><el-button type"primary" click"handleClick">我是一个按钮</el-button></template><script setup>//加…...

Redis 实现分布式缓存

一、引言 在当今互联网时代&#xff0c;随着业务的不断发展和用户量的持续增长&#xff0c;系统的性能和可扩展性成为了关键挑战。分布式缓存作为一种重要的技术手段&#xff0c;能够有效地缓解数据库压力、提高系统响应速度、增强系统的可扩展性。Redis 作为一种高性能的内存数…...

Chrome与火狐哪个浏览器的移动版本更流畅

在当今的数字化时代&#xff0c;移动设备已经成为我们生活中不可或缺的一部分。而浏览器作为我们访问互联网的重要工具&#xff0c;其性能和用户体验直接影响到我们的使用感受。本文将对比Chrome和火狐&#xff08;Firefox&#xff09;两款主流浏览器的移动版本&#xff0c;探讨…...

7篇Python爬虫实例,直接代码可运行,全网最全,注释超详细(适合收藏)——2、爬取图片信息。

7篇Python爬虫实例&#xff0c;可直接运行&#xff0c;适合收藏 python爬虫7篇实例&#xff0c;分七个文章进行发布&#xff1b;第二篇&#xff1a;爬取图片信息。 爬取图片信息&#xff0c;并将每张图片都下载下来。 爬虫主要三部分&#xff1a; 1、获取数据 2、数据解析 3、…...

25.停车场管理系统(基于web的Java项目)

目录 1.系统的受众说明 2.相关技术与方法 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 需求分析 3.2.1 系统功能描述 3.2.2 用例图分析 4. 系统设计 4.1 系统类分析 5. 系统详细设计与实现 5.1 用户登录 5.2 系统信…...

展览搭建公司怎么跟展会主办打好交道

与展会主办打好交道的重要性 首先&#xff0c;我们得明白&#xff0c;展览搭建公司为何要跟展会主办打交道。简单地说&#xff0c;展会主办拥有大量的参展商信息。这些参展商是展览搭建公司潜在的客户群体&#xff0c;与主办打好交道&#xff0c;就等于拿到了通向这些客户的 “…...

软件开发方法

软件开发方法是一种用于指导软件开发过程的系统性方法,它涵盖了从需求分析、设计、编码、测试到维护的整个软件生命周期。软件开发方法通常包括一系列的步骤、技术和工具,以确保软件的质量、可维护性和可扩展性。 常见的软件开发方法有瀑布模型、敏捷开发、螺旋模型等。这些…...

「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目

本篇将带领你实现一个互动性十足的灯光控制小项目&#xff0c;用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互&#xff0c;是学习鸿蒙应用开发的重要基础。 关键词 UI互动应用状态管理动态图片加载用户交互 一、功能说明 在这个灯光…...

十二:java web(4)-- Spring核心基础

目录 创建项目 Spring 核心基础 Spring 容器 Spring 容器的作用 Spring 容器的工作流程 Bean Bean 的生命周期 IOC&#xff08;控制反转&#xff09;与依赖注入&#xff08;DI&#xff09; 控制反转的概念 依赖注入的几种方式&#xff08;构造器注入、Setter 注入、接…...

new和malloc有什么区别,他们的用法是什么?malloc分配失败会导致什么问题

1) new和malloc的区别&#xff0c;和他们的用法 new 和 malloc 主要有以下区别&#xff1a; 一、性质和来源 new &#xff1a;是 C 的运算符&#xff0c;在操作时会调用构造函数进行对象的初始化。它是 C 语言层面的操作&#xff0c;能更好地与 C 的面向对象特性结合。 malloc …...

了解SQLExpress数据库

SQLExpress&#xff08;Microsoft SQL Server Express&#xff09;是由微软公司开发的一款免费且轻量级的数据库管理系统。以下是关于SQLExpress的详细解释&#xff1a; 一、定义与特点 定义&#xff1a; SQLExpress是Microsoft SQL Server的一个缩减版或基础版&#xff0c;旨在…...

geoserver创建一个根据属性显示不同形状的点样式

geoserver创建一个根据属性显示不同形状的点样式 三角形 -triangle 圆形 - circle 正方形 - square 星形 - star 十字形 - cross 菱形 -diamond 代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <StyledLayerDescriptor version"…...

中国遗传学会2024全国学术研讨会在长沙成功召开

2024年11月3日至6日&#xff0c;备受瞩目的中国遗传学会2024全国学术研讨会在长沙盛大召开&#xff0c;此次盛会由中国遗传学会携手湖南省遗传学会共同主办&#xff0c;中南大学与南华大学共同承办。大会以“遗传学&#xff1a;前沿与交叉”为主题&#xff0c;吸引了来自全国各…...

Android Studio 多工程公用module引用

在Android Studio中&#xff0c;如果有多个工程需要共享同一个module&#xff0c;你可以通过以下步骤来实现module的公用&#xff1a; 1.将你想共享的module移动到一个单独的目录&#xff0c;比如一个新建的"libraries"文件夹。 2.修改module的build.gradle文件&am…...

(实战)WebApi第9讲:EFCore性能优化(IQueryable延迟查询、取消跟踪机制)

一、例子是第8讲的四、6&#xff08;EFCore的静态化处理 &#xff09;&#xff1a;分析ToList() ToList()在下图绿色框内。 二、在没有最终取数据的时候&#xff0c;使用 IQueryable<T> 延迟执行查询 &#xff08;1&#xff09;在没有最终取数据的时候&#xff0c;不要使…...

Java实现pdf转图片

第一步 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.32</version> <!-- 请检查最新版本 --> </dependency> 第二步 package com.example.demo.file.pdf;import or…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...