Jar包冲突解决

“问题:在对接TrustSQL开放测试平台时,遇到问题,对方提供的SDK工具包中报空指针异常,
原因:检查后发现是因为在选择加密曲线“secp256k1”时,没有获取到此曲线传递,一步步DEBUG后发现是由于对方提供的SDK工具包中已有方法:ECNamedCurveTable.getParameterSpec(“secp256k1”)
而项目本身已经带有一个jar包:bcprov-jdk14-136.jar,此jar包中也包含有上述方法,而且方法路径和SDK工具包中一致,在项目运行过程中,项目本身优先调用的是此jar包中的方法,而bcprov-jdk14-136.jar中的ECNamedCurveTable.getParameterSpec(“曲线”)内无法生成,secp256k1的曲线传递,故而返回一个null对象,导致在接下来的调用中,产生了空指针异常。
总结:综上所述,原因就是说简单不简单的jar包冲突

解决:
方法一:项目是maven项目,使用命令:dependency:tree -Dverbose -Dincludes=:bcprov-jdk
找出此bcprov-jdk14-136.jar包的依赖关系,如下所示:
Jar包冲突解决_第1张图片

得知此jar包是在org.xhtmlrenderer:core-renderer下依赖进入项目的,故在pom.xml中添加以下配置:

 <dependency>
   <groupId>org.xhtmlrenderergroupId>
   <artifactId>core-rendererartifactId>
   <version>R8pre2version>
    <exclusions>
                <exclusion>
                    <groupId>com.lowagiegroupId>
                    <artifactId>itextartifactId>
                exclusion>
                <exclusion>
                    <groupId>org.bouncycastlegroupId>
                    <artifactId>bcprov-jdk14artifactId>
                exclusion>
            exclusions>
  dependency>

即可排除bcprov-jdk14-136.jar,问题解决!
另外注意:貌似使用maven排除jar包需一层一层往下排除,直接排除最底层依赖的jar貌似是不行,具体没有验证,有大神知道么?!
方法二:捷径~项目打包后,直接删除bcprov-jdk14-136.jar即可,此方法不知有没有缺陷,毕竟依赖关系在那摆着!~”

你可能感兴趣的:(Maven)