关于bcprov-jdk15on的jar包冲突问题尝试处理方案

最近几天调试N网项目,因为要兼容东方通中间件,分析发现有了bcprov-jdk15on包冲突的问题,针对这类型个人试了一下几点处理方案。其中有不少前辈的处理方案,个人做一个总结归纳。

前面是在tomcat等环境下直接用,最后一种是本人使用的方法,也是个人决定根治的方法。

第一种 直接删除比较低的那个版本的jar包

通常情况下,高一个小版本的jar都会兼容低版本的功能,这是大多数开发者都会准守的规则。直接把较低版本的那个jar包删除即可。

第二种 高版本覆盖合并 直接以搞版本覆盖低版本。通常建议只需要高一个小版本即可。如A项目用1.51,B项目用1.52.那么直接用1.52包替换1.51的包即可。使用相同源的包不会出现冲突。经过反编译处理过的包除外。附带maven仓库地址,可以直接去下载

第三种 修改引用包路径处理:

如果是D.jar包当中包含了引用的包,那就考虑反编译出来,然后修改包里面的引用路径。 即: 把org.bouncycastle 改成 shade.bouncycastle等。这样子处理, 网上有很多种方法,如maven-shade-plugin重新构建新jar包等。本人不太擅长用这个方法, 本人用了打包工具jarjar 1.下载jarjar1.3.jar 的工具包。可以用maven,也可以直接去maven仓库下载

<dependency>
            <groupId>com.googlecode.jarjar</groupId>
            <artifactId>jarjar</artifactId>
            <version>1.3</version>
        </dependency>

2.新建rule.txt 文件,并在其中 保存以下内容。这个shade.bouncycastle 可以自定义引用目录

rule org.bouncycastle.** shade.bouncycastle.@1

3.把这几个文件都放在同一个目录中,注意目录名称不要带汉字。

4.通过cmd,进入这个目录当中,然后运行以下命令

java -jar jarjar-1.3.jar process rule.txt bcprov-jdk15on-1.65.jar shade-bcprov-jdk15on-1.65.jar

5.如此便完成了替换

6.通过反编译工具,我们可以看到已经替换的目录。反编译工具很多,包括jd-gui、jadx、bandizip等等,大家可根据自己的情况使用。

经验分享 程序员 微信小程序 职场和发展