Maven高级——聚合、继承、属性、版本管理、资源配置、多环境开发
创始人
2025-06-01 07:20:04

一、分模块开发与设计

直接引用前面写过的

https://blog.csdn.net/weixin_51351637/article/details/128052572

二、聚合

直接引用前面写过的

https://blog.csdn.net/weixin_51351637/article/details/128052572

三、继承

直接引用前面写过的

https://blog.csdn.net/weixin_51351637/article/details/128052572

四、属性

4.1 基本介绍

经过上面的操作,我们的子模块和父模块之前有了一个良好的关系,但是在我们的父模块的内部很有可能会出现问题

比如说,同一个groupId下有不同的artifactId,很有可能会出现 artifactId不同。

或者说我们改了其中的一个版本,但是忘记改另外两个依赖的版本

如下图所示

现在我们希望出现一种机制,能够统一更改同一个groupId不同artifactId的版本信息(version),这种机制叫做属性,以后的版本信息都用这个属性的内容

4.1.1 自定义属性

等同于定义变量,方便统一维护

4.1.2 内置属性

使用Maven的内置属性,快速配置

调用格式:

${basedir}
${version}
${project.version}

4.1.3 Setting属性

使用Maven配置文件setting.xml中的标签属性,用于动态配置

比如说想读取Maven安装目录中的setting.xml文件中的内容,就可使用下面的形式

调用格式:

${settings.localRepository}

4.1.4 Java系统属性

读取java系统属性

${user.home}

maven里面也可以操作

系统属性查询方式:

mvn help:system

这样执行之后就会下载许多的插件,也会有两个分区,下面是系统变量

比如我们填写这个,我们就可以获取到Java(TM) SE Runtime Environment

${java.runtime.name}

4.1.5 环境变量属性

下半区就是环境变量分区

环境变量引用前加env.

使用和4.1.4相同

4.2 定义属性

    1.85.1.9.RELEASE

4.3 使用属性

    org.springframeworkspring-context${spring.version}

另外说明

这个时候不需要在标签中填写。我们可以看到父工程的version和我们自己引入依赖的版本一个样子的1.0-SNAPSHOT,所以Maven为我们提供了一个比较方便的东西,如果我们想在中的使用和该pom.xml文件一个样的值,可以直接写 ${version}

    com.itheimassm1.0-SNAPSHOTpom练习com.itheimassm_pojo${version}

但是说实话我在实习的时候看公司pom文件,并没有这么做,还是在properties中进行声明,因为公司的项目会有很多的文件,有时候我们在本地只会修改一两个工程包,其他的工程包的版本不会动。如果这个时候我们修改父工程的版本,剩下的子工程的版本都会改变,但是大部分子工程的内容是没有改变的,所以没有必要。
这种情况下在我的公司是从git上的分支再拉取自己的分支,写完代码push之前我们需要统一版本,这时候我们需要将parent工程的pom文件版本以及修改过其他工程的pom文件版本统一,没有修改的就不用动,再install(将修改后的工程下载到本地)、deploy一下,上传到git自己的分支,然后再合并到test分支进行测试(parent项目不合并)。
合并到test的时候肯定会有冲突,此时pom文件中的版本要以test分支的版本号一致,相当于又将版本改回去了

五、版本管理

5.1 SNAPSHOT与RELEASE区别

SNAPSHOT: 快照版本

东西还没做完,正在开发, 也就是未完成版

  • 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和实时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)

  • 快照版本会随着开发的进展不断地更新

RELEASE:发布版本,成品

我们之前在spring天天见到RELEASE

  • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本成为发布版本

修改完版本记得install一下,将依赖下载到仓库。
说到底这个操作都是改了一个名

5.2 工程版本号约定

六、资源配置

6.1 main资源文件对应信息

这是在父工程的pom.xml文件中统一配置,下面的资源的属性要在其他的资源文件中使用

jdbc:mysql://localhost:3306/ssm_db

下面是在application.yaml中配置,比如

url: ${jdbc.url}

但是我们把项目install到仓库中,查看pom文件,发现是没有解析的,那这肯定是不行的

那我们怎么解决这件事呢?

在父工程的pom.xml中的构建里面定义清楚资源文件参与这种形式的使用

../ssm_dao/src/main/resourcestrue

但是现在又存在了一个新的问题,如果有很多的工程,比如controller、service、dao等都存在类似的配置文件,那岂不是要添加很多?

答案是不用的,我们可以来一个通配的格式,如下所示

${project.basedir}/src/main/resourcestrue

6.2 test资源文件对应信息

还有一种情况,就是测试类下面也会有一些配置文件,那这怎么做呢?

如下所示:

${project.basedir}/src/main/resourcestrue${project.basedir}/src/test/resourcestrue

七、多环境开发配置

生产环境、开发环境、测试环境,在这三个不同的环境时,我们很有可能会改一下我们的配置(每次上线都需要把这些配置改一下),所以我们接下来要实现我们的配置能在多个环境运行,不用再修改配置

7.1 创建多环境

环境一般就是指生产环境、开发环境、测试环境。

    devjdbc:mysql://127.0.0.0:3306/ssm_dbprojdbc:mysql://localhost:3306/ssm_db

但是现在如果执行的话,我们的配置文件还是直接展示url: ${jdbc.url},并没有进行编译解析。

因为我们在Maven运行install的时候并没有指定环境,下面我们就指定环境

7.2 指定运行环境

-P表示指定环境

mvn install -P pro

进入公司实习之后,发现公司会使用nacos远程配置,在这个地方会指定运行的环境

我们不通过命令行,我想直接install就让环境生成,有没有办法呢?

有!我们可以设置一种环境作为默认使用

    devjdbc:mysql://127.0.0.0:3306/ssm_dbtrueprojdbc:mysql://localhost:3306/ssm_db

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...