您当前的位置: 首页 >  ar

石头wang

暂无认证

  • 5浏览

    0关注

    295博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

石头wang 发布时间:2020-08-23 17:28:20 ,浏览量:5

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

我们知道可以使用 来排除掉引入的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引入的,而是自身就带有的,这是就无能为力了。如图所示

在这里插入图片描述

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

微信扫码登录

0.3801s