一、jar包冲突
由于项目中使用的对外传输加密组件是内部自己定制开发的,所以和第三方对接时,通常会连同加密组件包和调用demo一起提供给对方。而基于国产密码算法的加密组件一般都依赖于bc加密包,我方使用的bc包版是:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
有些对接方使用的bc包版本是:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
由于我方提供的依赖包使用的版本bcprov-jdk15on导致对接方出现jar包冲突的问题,为了彻底根除此类问题,决定修改我方依赖的bc组件的包路径,这样彻底与其他版本的bc包隔离开,从而解决bc包冲突问题。
二、 冲突解决
这里使用google的jarjar组件进行包路径修改:
<dependency>
<groupId>com.googlecode.jarjar</groupId>
<artifactId>jarjar</artifactId>
<version>1.3</version>
</dependency>
配置好需要调整的包路径规则文件rule.txt:
rule org.bouncycastle.** shadow.bouncycastle.@1
将相关原料放到一个目录下:
最后在命令行执行java命令:
# 堆代码 duidaima.com
java -jar jarjar-1.3.jar process rule.txt bcprov-jdk15on-1.70.jar shadow-bcprov-jdk15on-1.70.jar
如上图shadow-bcprov-jdk15on-1.70.jar就是我们新生成的jar包:
包路径已完全调整,然后将我方的定制加密组件进行反编译重新打包,依赖bc包的部分全部调整为shadow前缀的包即可。
三、小结
本文以解决bc包冲突为例,分享使用修改包路径方式解决多版本依赖冲突问题,修改包路径后的依赖将和冲突包彻底隔离开。随手记录,感谢阅读,希望本文能够给您带来一丝启发和帮助。