Maven-shade:小孩子才做选择,两个jar我都要

最近项目对接第三方时,遇到一个SM2解密问题,拿到第三方的密文后解密失败。首先想到C1C2C3 和C1C3C2的问题,于是......,半个小时后,决定要来第三方的sdk。

发现他们sdk依赖的jar是1.46版本,而我的项目依赖的是1.64。

org.bouncycastlebcprov-jdk15on1.46

要降版本吗?想到不要想,降版本会导致现有的许多方法都要重写,还要重新测试,这代价我可接受不了,还是问问度娘别人是否遇到过同样的问题吧。

最终maven-shade-plugin 插件浮现在眼前,它可以对依赖的jar包的类路径进行修改。而1.64 和1.46 两个版本冲突,就是因为同一个类在不同的版本中使用方式不同,那么我只有改变其中一个jar包的类路径,同时依赖两个包不就可以了吗。

抱着试一试的态度:

1、新建一个空的Maven项目

pom.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>    4.0.0    cloneli.bouncycastle    bcprov-jdk15on    1.46                        org.bouncycastle            bcprov-jdk15on            1.46                            third            sm-sdk            1.0                                                    org.apache.maven.plugins                maven-shade-plugin                3.2.1                                    false                                                                                                    package                                                                                shade                                                                                                                                                                                                        org.bouncycastle                                    cloneli.bouncycastle                                                                                                                                                            *:*                                                                            META-INF/*.SF                                        META-INF/*.DSA                                        META-INF/*.RSA                                        META-INF/services/*                                        META-INF/versions/*                                                                                                                                                                                    

其中dependencies 中 sm-sdk 是第三方提供的工具,它依赖的就是bcprov-jdk15on 1.46版本,我要做就是将这两个包中的org.bouncycastle.xxx进行修改,关键配置如下:

org.bouncycastlecloneli.bouncycastle

2、install

install后在本地仓库中就生成了一个新的jar。然后可以在项目的pom.xml中加上下面的坐标,导入后,点开这个jar,会发现其内容就是sm-sdk 和 bcprov-jdk15on 的class文件,但是相关的类路径都已经变成了cloneli.bouncycastle.xxx

    cloneli.bouncycastlebcprov-jdk15on1.46

本地测试,看到了想要的结果,1.64 和1.46 和谐共处。

3、上传服务器

到这里还没有结束,不要忘记将新的jar上传公司的服务器,不然其他同事拿不到这个包。

总结

这里 maven-shade-plugin 插件单纯看效果,就和我们把 sm-sdk 和 bcprov-jdk15on 中的所有类都复制到自己的项目中重写了一样,既然都重写了,改个类路径不是很合理吗?

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章