jar包冲突解决方案——jar包名修改兼容实现

最近对公司的导出功能进行easyExcel化改造的时候发现,既要兼容原有的导入导出功能(因为已经成型封装成了不可拆分的jar包),又要保证新导入导出功能的可用性,保证大数据量导出不会OOM。原有的功能使用的POI jar包是3.9,而easyExcel支持最低的POI版本是3.17。对此,这里给出一种解决jar包冲突,实现jar包同时存在的一种方式——修改jar包包名实现。

这里一共涉及到三个jar包:

  1)、poi

  2)、poi-ooxml

  3)、poi-ooxml-schemas

思路在于,原有的功能继续使用上述jar包的3.9版本不变动,新增3.17版本的三个jar包,把包名修改掉,然后给easyExcel进行依赖,修改easyExcel的源码,使包名用上修改后的。然后将修改后的easyExcel源码进行重新打包成jar,引进我们的项目中即可实现两个人poi版本共存。

下面给出实际操作:

1、下载包名修改工具jar.jar,地址: https://download.csdn.net/download/jack_wang_2014/10415512  ;同时下载上述三个poi包,放在同一个目录:

jar包冲突解决方案——jar包名修改兼容实现_第1张图片

2、验证下能否修改包名:很多教程都忽略了这一步,导致包名修改失败的情况但是系统没有给出提示。在该目录下打开cmd,

执行:java –jar jarjar-1.3.jar strings  poi-3.17.jar  查看 poi-3.17.jar包里面所有包名,输出包名代表能成功修改;依次对三个jar包进行修改,如果没用任何输出或者报错,可以考虑换其余适合的jar包版本;

jar包冲突解决方案——jar包名修改兼容实现_第2张图片

3、开始修改包名:首先,我们需要创建一个rule.txt 规则文件,内容格式为:

rule 原来需要改的包名.**  改成为的包名.@1

例如:rule org.apache.poi.**  com.mytest.poi.@1

然后执行转换命令,格式为:

java -jar "jarjar工具名" process "要运行的文本名" "原jar包名" "新jar包名"

例如:java -jar jarjar-1.3.jar process rule.txt poi-3.17.jar mypoi.jar

依据不同的包名规则可以创建不同的rule文件,依次对上述三个jar包进行修改,然后上传到maven仓库;

4、在github检出easyExcel的源码,将原有的poi导入的maven依赖去除,导入修改后的依赖:


    com.my.test
    poi
    3.17-DEFINE


    com.my.test
    poi-ooxml
    3.17-DEFINE


    com.my.test
    poi-ooxml-schemas
    3.17-DEFINE

5、修改easyExcel的poi依赖源码,主要是在于import这里,我们需要将导入的路径替换成修改之后的,然后将easyExcel打包成jar包,引入我们的项目。至此,兼容性改造也就完成了。

 

你可能感兴趣的:(技术)