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

使用maven-shade-plugin解决依赖版本冲突

项目里引入多个版本依赖时,最后只会使用其中一个,一般可以通过排除不使用的依赖处理,但是如果需要同时使用多个版本,可以使用maven-shade-plugin解决。

以最典型的poi为例,poi版本兼容性很低,如果出现找不到类或者类未定义之类的错误,一般就是因为poi版本不兼容。

项目有这样一个需求,需要使用poi-tl-ext实现word导出富文本,poi-tl-ext里使用的是poi 4.1.2,而原本项目里使用的是2.x,由于版本差异过大,使用新版本poi,会影响到系统的旧功能。

为了解决以上情况,需要同时使用两个版本的poi,之所以存在冲突,是因为存在同包同名的类,因此只要将其中一个包重命名,就可以解决冲突,maven-shade-plugin是一个打包工具,可以用这个工具重命名指定报名,并生成新的依赖包。

具体操作:

1、新建一个maven项目,在pom.xml中引入依赖,设置重命名规则

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.test</groupId><artifactId>shade</artifactId><version>4.1.2</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>io.github.draco1023</groupId><artifactId>poi-tl-ext</artifactId><version>0.4.22</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><relocations><relocation><pattern>org.apache.poi</pattern><shadedPattern>shade.org.apache.poi</shadedPattern></relocation><relocation><pattern>com.deepoove.poi</pattern><shadedPattern>shade.com.deepoove.poi</shadedPattern></relocation></configuration></execution></executions></plugin></plugins></build>
</project>

2、执行mvn package生成jar包

3、在项目里引入生成的jar包

<dependency><groupId>com.test</groupId><artifactId>shade</artifactId><version>4.1.2</version><scope>system</scope><systemPath>${project.basedir}/src/main/lib/shade-4.1.2.jar</systemPath>
</dependency>

4、需要使用4.1.2版本的poi类时,import重命名后的包名

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

相关文章:

  • RCLAMP0504S.TCT 升特半导体TVS二极管 无损传输+军工防护+纳米护甲 ESD防护芯片
  • 陕西地区特种作业操作证考试题库及答案(登高架设作业)
  • Product Hunt 每日热榜 | 2025-07-24
  • 2025年人形机器人动捕技术研讨会于7月31日在京召开
  • 火语言 RPA 在日常运维中的实践
  • ESP32使用 vscode IDF 创建项目到烧录运行全过程
  • 优选算法:移动零
  • 使用ffmpeg转码h265后mac默认播放器不支持问题
  • Mac电脑使用IDEA启动服务后,报service异常
  • 从零构建 Node20+pnpm+pm2 环境镜像:基于 Dockerfile 的两种方案及持久化配置指南
  • 开源Qwen凌晨暴击闭源Claude!刷新AI编程SOTA,支持1M上下文
  • Vue3实现视频播放弹窗组件,支持全屏播放,音量控制,进度条自定义样式,适配浏览器小窗播放,视频大小自适配,缓冲loading,代码复制即用
  • 合泰单片机怎么样
  • idea监控本地堆栈
  • Linux系统监控模块之Zabbix7添加监控主机
  • 生成式人工智能展望报告-欧盟-03-经济影响
  • 第一二章笔记
  • 同步时钟系统提升仓库自动化水平
  • Opentrons 模块化平台与AI技术助力智能移液创新,赋能AAW™自动化工作站
  • 爬虫逆向--Day12--DrissionPage案例分析【小某书评价数据某东评价数据】
  • 2025年区块链安全威胁全景:新兴漏洞、攻击向量与防护策略深度解析
  • 常见半导体的介电常数
  • gitlab使用 备份恢复 全量迁移
  • 期货交易系统界面功能与操作流程解析
  • C++ <多态>详解:从概念到底层实现
  • Java 实现 B/S 架构详解:从基础到实战,彻底掌握浏览器/服务器编程
  • 深入理解 ThreadLocal:从原理到最佳实践
  • LLM层归一化:γβ与均值方差的协同奥秘
  • MySQL--day13--视图存储过程与函数
  • 【小董谈前端】【样式】 CSS与样式库:从实现工具到设计思维的跨越