依赖包出现类重名问题

debug一段代码抛出异常:

java.lang.reflect.InvocationTargetException

原因是:

Caused by: java.lang.NoSuchMethodError: org.apache.thrift.transport.TFramedTransport.<init>(Lorg/apache/thrift/transport/TTransport;I)V

        at com.taobao.timetunnel.thrift.router.RouterService$getAllPubBroker_args.write(RouterService.java:2508)
        at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:63)

定位原因可是参数出错或者包引用有问题。然后就开始排查日志里面提到的类,发现这个类在项目里面有两个同名的,但方法名不一样,基本可以知道应该是这个问题引起的。现在就是找是两个类所在包怎么引入的。查pom.xml没有直接类的包名,然后使用mvn的命令;


打印出所在jar包的树信息,找到间接引用的包信息:

mvn dependency:resolve 打印出已解决依赖的列表 
mvn dependency:tree 打印整个依赖树 
mvn dependency:analyze 打印出么有直接依赖的列表

(如果依赖关系比较多,屏幕看不完整,可以使用 -Doutput=/path/to/file.graphml -DoutputType=graphml,文件路径一定要写,否则默认会把文件生成到项目pom文件的地址位置,如果有多个pom文件,就会有多分对应的文件。

[INFO] |  +- com.alibaba.external:google.zxing:jar:1.3:compile
[INFO] |  +- com.alibaba.external:nosql.cassandra.hector:jar:0.5.1.9:compile
[INFO] |  |  +- com.alibaba.external:nosql.cassandra:jar:0.5.1:compile
[INFO] |  |  |  +- com.alibaba.external:google.clhm:jar:1.0:compile
[INFO] |  |  |  +- com.alibaba.external:sourceforge.flexjson:jar:1.7:compile
[INFO] |  |  |  +- com.alibaba.external:sourceforge.high-scale-lib:jar:1.0:c
le
[INFO] |  |  |  +- com.alibaba.external:sourceforge.jline:jar:0.9.94:compile
[INFO] |  |  |  \- com.alibaba.external:org.perf4j:jar:0.9.12:compile
[INFO] |  |  \- com.alibaba.external:apache.thrift:jar:r820831:compile

查看下代码,不需要被引入的包并没有被调用,所以这次解决比较简单,只需要pom里面设置不关联的包不引入即可。

然后在pom文件里面使用隔开:

<dependency>
<groupId>com.alibaba.external</groupId>
<artifactId>nosql.cassandra.hector</artifactId>
<version>0.5.1.9</version>
<exclusions>  
        <exclusion>  
            <groupId>com.alibaba.external</groupId>  
                <artifactId>apache.thrift</artifactId>  
            </exclusion>  
         </exclusions>  

</dependency>

再查下项目依赖树,现在的信息为:

|  |  +- com.alibaba.external:nosql.cassandra.hector:jar:0.5.1.9:compile
|  |  |  \- com.alibaba.external:nosql.cassandra:jar:0.5.1:compile
|  |  |     +- com.alibaba.external:google.clhm:jar:1.0:compile
|  |  |     +- com.alibaba.external:sourceforge.flexjson:jar:1.7:compile
|  |  |     +- com.alibaba.external:sourceforge.high-scale-lib:jar:1.0:compile
|  |  |     +- com.alibaba.external:sourceforge.jline:jar:0.9.94:compile
|  |  |     \- com.alibaba.external:org.perf4j:jar:0.9.12:compile
|  |  +- com.alibaba.crm.shared:eai:jar:1.0:compile

引起混乱的那个类包已经没有了。


PS:apache的dependency的指令参考http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值