目录
解决办法:使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可
Step3.pom文件中添加maven-shade-plugin
Step4.执行mvn package 或 IDEA中双击Lifecycle中的package
Step5.从生成的target目录下找到新的jar包,引入到原项目中
问题描述:历史功能整改繁琐,新功能需要高版本依赖
公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。
解决办法:使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可
整体流程
==》1.创建空的maven项目
==》2.pom文件中添加需要修改名称的依赖
==》3.pom文件中添加maven-shade-plugin
==》4.执行mvn package 或 IDEA中双击Lifecycle中的package
==》5.从生成的target目录下找到新的jar包,引入到原项目中
==》6.对使用的方法重新引入时选择新包名的方法
Step1.创建空的maven项目
(注意不是springboot项目,会自动引入很多不必要的依赖)
Step2.Pom文件中引入需要修改名称的依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
Step3.pom文件中添加maven-shade-plugin
只需要调整改名前和改名后的包名即可,其他直接CV
<build>
<finalName>maven-shade</finalName>
<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>
<artifactSet>
<excludes>
<exclude>classworlds:classworlds</exclude>
<exclude>junit:junit</exclude>
<exclude>jmock:*</exclude>
<exclude>*:xml-apis</exclude>
<exclude>org.apache.maven:lib:tests</exclude>
<exclude>log4j:log4j:jar:</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<createDependencyReducedPom>true</createDependencyReducedPom>
<relocations>
<relocation>
<!-- 改名前 -->
<pattern>org.apache.poi</pattern>
<!-- 改名后 -->
<shadedPattern>shade.org.apache.poi</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Step4.执行mvn package 或 IDEA中双击Lifecycle中的package
Step5.从生成的target目录下找到新的jar包,引入到原项目中
Step6.对使用的方法重新引入时选择新包名的方法
原项目代码不在本地,直接用了参考链接2的图,更清晰地说明
PS:写这篇文章的时候,发现了一个实现word模板功能的神器,还没有试过,不过看起来很厉害的样子,先留存一下:Poi-tl Documentation (deepoove.com)
方案 | 移植性 | 功能性 | 易用性 |
---|---|---|---|
Poi-tl | Java跨平台 | Word模板引擎,基于Apache POI,提供更友好的API | 低代码,准备文档模板和数据即可 |
Apache POI | Java跨平台 | Apache项目,封装了常见的文档操作,也可以操作底层XML结构 | 文档不全,这里有一个教程:Apache POI Word快速入门 |
Freemarker | XML跨平台 | 仅支持文本,很大的局限性 | 不推荐,XML结构的代码几乎无法维护 |
OpenOffice | 部署OpenOffice,移植性较差 | - | 需要了解OpenOffice的API |
HTML浏览器导出 | 依赖浏览器的实现,移植性较差 | HTML不能很好的兼容Word的格式,样式糟糕 | - |
Jacob、winlib | Windows平台 | - | 复杂,完全不推荐使用 |
本文参考链接:
1.maven-shade-plugin解决Maven同一依赖多版本共存 - Lixin-Link - 博客园 (cnblogs.com)