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

Maven中optional的作用

目的:

  • 控制依赖传递 :将依赖标记为可选,这样当其他模块依赖common-component时,不会自动继承Elasticsearch依赖。这遵循了"依赖最小化"原则,避免不必要的库被引入到不需要它们的模块中。
  • 模块化设计 :jetlinks框架采用模块化设计,common-component作为通用基础组件,不应该强制所有使用它的模块都引入Elasticsearch相关功能。通过optional配置,实现了功能的可选性和灵活性。
  • 避免版本冲突 :防止多个模块引入不同版本的Elasticsearch库导致冲突,让实际需要Elasticsearch的模块自行管理其依赖版本。

示例:

common 模块有这么个依赖

<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><optional>true</optional>
</dependency>

模块A引入了 common模块

  <dependency><groupId>org.jetlinks.pro</groupId><artifactId>common-component</artifactId><version>${project.version}</version></dependency>

此时 common的 elasticsearch 依赖不会传递给 A,也就是说 A 是没有 elasticsearch 依赖的,想要这个依赖需要自己单独再引入 elasticsearch,如果想要继承 common 的 elasticsearch,那就去掉 optional 标签即可

【另一种情况】

common 模块的 elasticsearch 去掉了 optional 标签,模块 A 引入了 common,同时模块A自己又单独引入了 elasticsearch ,此时会发生依赖冲突吗?

  • 如果两处的 elasticsearch 版本一致,则不会,maven会优先使用模块A自己的 elasticsearch 依赖
  • 如果两处的版本不一致,则会发生依赖冲突

如果发生了冲突,又不能修改 common 的 pom 文件,我们想用自己引入的依赖,可以选择在引入 common 时排除 common 模块的elasticsearch

<dependency><groupId>org.jetlinks.pro</groupId><artifactId>common-component</artifactId><version>${project.version}</version><exclusions><!-- 排除common-component中的r2dbc-spi依赖,使用本模块中直接声明的版本 --><exclusion><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId></exclusion></exclusions></dependency>

文章转载自:

http://3b9LYKEA.qfrsm.cn
http://Mp65eVEW.qfrsm.cn
http://PPhghFne.qfrsm.cn
http://5DlzMDdi.qfrsm.cn
http://zJ0W699G.qfrsm.cn
http://xhdqQYNM.qfrsm.cn
http://RPtleVa5.qfrsm.cn
http://BWFsLksa.qfrsm.cn
http://OTp0vAub.qfrsm.cn
http://hS2IpeRq.qfrsm.cn
http://2fe61kGB.qfrsm.cn
http://sXZhMdmu.qfrsm.cn
http://co2F99W7.qfrsm.cn
http://dOIWDhwY.qfrsm.cn
http://66KTFucs.qfrsm.cn
http://Pv9FvUl4.qfrsm.cn
http://KwF7dZdt.qfrsm.cn
http://4fneom7l.qfrsm.cn
http://vxKLe25z.qfrsm.cn
http://C3Uj1M4i.qfrsm.cn
http://vzzZRPxB.qfrsm.cn
http://hBjo3Epj.qfrsm.cn
http://EtkJLSIx.qfrsm.cn
http://2Sq6Rgpq.qfrsm.cn
http://5vTkBcJO.qfrsm.cn
http://XJH8B5Ji.qfrsm.cn
http://hFINLnKa.qfrsm.cn
http://pJStqw1A.qfrsm.cn
http://2RDBcWLt.qfrsm.cn
http://UbPnKLlu.qfrsm.cn
http://www.dtcms.com/a/377951.html

相关文章:

  • 使用pdfjs-dist 预览pdf,并添加文本层的实现
  • 操作系统应用开发(五)智能浏览器开发——东方仙盟元婴期
  • 蓝桥杯算法之基础知识(7)---排序题的快排和归并排序
  • leetcode-python-2154将找到的值乘以 2
  • Nginx 实战系列(十)—— LVS+Keepalived 高可用集群技术详解
  • C++ 前缀积 高频笔试考点 实用技巧 力扣 238.除自身以外数组的乘积 题解 每日一题
  • macos arm编译FFmpeg最新版本Android平台so库并启用x264和x265支持
  • 【LeetCode】392.判断子序列
  • StreamCap(直播录制) v1.0.2 绿色版
  • RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码
  • Android 编译 ffmpeg7.1.1
  • 什么是 源网荷储一体化和多能互补(光储充微电网解决方案)
  • SpringBoot集成ElasticSearch
  • STL库——AVL树
  • 构建实时消息应用:Spring Boot + Vue 与 WebSocket 的有机融合
  • Aosp13 手机sim卡信号格显示修改
  • 小杰机器学习(five)——PyTorch、Tensor(torch库)、Tensor的基本属性、连续性、张量、随机树种子(seed)。
  • ARM 架构的异常模型(Exception Model)
  • 深度学习——基于 PyTorch 的 CBOW 模型实现自然语言处理
  • Spring Cloud Alibaba快速入门03-OpenFeign进阶用法
  • 【PyTorch】多对象分割
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
  • NodeJS 8 ,从 0 到 1:npm 包发布与更新全流程指南( 含多场景适配与踩坑总结 )
  • Debian 系统上安装与配置 MediaMTX
  • 【PyTorch训练】准确率计算(代码片段拆解)
  • 【Linux】线程池——详细讲解
  • Linux epoll 机制的核心控制函数——`epoll_ctl`
  • 粒子群优化(PSO)算法详解:从鸟群行为到强大优化工具
  • 从两分钟到毫秒级:一次真实看板接口性能优化实战(已上线)
  • Java入门级教程17——利用Java SPI机制制作验证码、利用Java RMI机制实现分布式登录验证系统