问题描述

通常情况下高版本会兼容低版本,如果 A 依赖 C 的1.0,B依赖C 的2.0,然后 B又依赖 A,那么只要排除 A中C的1.0就可以。
但是如果高版本并不兼容低版本,那么就会需要同时存在多个版本,那么就会出现引用类的时候出现 包名、类名完全一致的多个类。
有一个解决办法是修改其中一个版本的包名来区分。修改包名需要用到 jarjar.jar的工具
jarjar.jar

使用方式

把下载的​​jarjar-1.4.jar​​包放在电脑里的一个英文目录下,同时把要修改的​​bcprov-jdk15on-1.54.jar​​也放在相同目录。

新建rule.txt,写上​​rule org.apache.poi.** com.apache.poi.@1​​,这个是改名规则,即把​​org.apache.poi.**​​的全改成​​com.apache.poi.​​,其中的​​@1​​代表匹配第一个​​*​​或者​​​​,如果后面还有,就使用@2、@3……

我的压缩文件里已经有rule.txt,可以参照着修改

可以先执行命令​​java -jar jarjar-1.4.jar strings bcprov-jdk15on-1.54.jar​​查看是否可以正确读取包名。

然后执行​​java -jar jarjar-1.4.jar process rule.txt bcprov-jdk15on-1.54.jar bcprov-jdk15on-1.54-new.jar​​,代表以​​rule.txt​​的规则修改​​bcprov-jdk15on-1.54.jar​​,生成的文件名为​​bcprov-jdk15on-1.54-new.jar​​,新文件名随意。