您当前的位置: 首页 >  ar

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

如何排除掉maven引入的jar包里的某个类

qq_34412985 发布时间:2021-10-15 20:00:04 ,浏览量:0

我遇到的问题是工程中引入Inceptor.jar包后报错,

如何排除掉maven引入的jar包里的HttpHost类冲突导致,jar:file:/D:/work/maven_repository/com/pc/inceptor/1.0/inceptor-1.0.jar!/org/apache/http/HttpHost.class     jar:file:/D:/work/maven_repository/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar!/org/apache/http/HttpHost.class

解决方法:

1.工程pom文件中的引入Inceptor的位置在最上面,实际调到dependence的最下面就可以了

2.将httpcore.jar解压开后将里面的HttpHost删掉就可以了。

下文是参考别人的内容,原理类似

我们知道可以使用 来排除掉引入的jar包所依赖的jar包,但是有时候某个类并不是它引入其他jar而导致的,是这个jar本身的,你如何排除呢? 总不能把自身这个jar去掉吧,因为这个jar的其他类还是有用的。

比如有如下两个GAV

                    com.wyf.test             be-import1             1.0-SNAPSHOT                             com.wyf.test             be-import2             1.0-SNAPSHOT            

这是两个不同的GAV,思考一个问题,假MyApi设import1 和 2 中都有相同包名相同类名的类,比如都叫做 com.wyf.test.sameclass.MyApi,两个GAV的实现是不一样的,那究竟哪个生效? 结论是写在前面的生效,比如上面的import1覆盖import2,如果互换位置,import2生效。谁先写谁生效。

注意,这种覆盖并不是jar包级别的,而是细到类级别的,比如impot1虽然覆盖了import2,但是仅仅是 import1的com.wyf.test.sameclass.MyApi被 import2中相同包名和相同类名覆盖掉,但是,如果import2有一个其他类,在import1里是没有的,则不会被覆盖。

这是因为java的类加载机制是,加载了这个类后遇到相同的就不会再加载了。

利用这种特性,我们可以解决一些难题,比如有个GAV,我们需要覆盖掉某些类,因为这个GAV里那个类并不能通过maven的 来排除,我们就在这个GAV之前声明包含这个类的GAV。

注意,对某个GAV 进行 ,只能排除掉GAV所依赖的GAV,粒度是比较大的。万一你要排除的类,并不是这个GAV引入的,而是自身就带有的,这是就无能为力了。如图所示

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0421s