问题描述
通常情况下高版本会兼容低版本,如果 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,新文件名随意。