如何排除掉maven引入的jar包里的某个类
如何排除掉maven引入的jar包里的某个类
我们知道可以使用 <exclude>
来排除掉引入的jar包所依赖的jar包,但是有时候某个类并不是它引入其他jar而导致的,是这个jar本身的,你如何排除呢? 总不能把自身这个jar去掉吧,因为这个jar的其他类还是有用的。
比如有如下两个GAV
<dependencies>
<dependency>
<groupId>com.wyf.test</groupId>
<artifactId>be-import1</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.wyf.test</groupId>
<artifactId>be-import2</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
这是两个不同的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的<exclude>
来排除,我们就在这个GAV之前声明包含这个类的GAV。
注意,对某个GAV 进行 <exclude>
,只能排除掉GAV所依赖的GAV,粒度是比较大的。万一你要排除的类,并不是这个GAV引入的,而是自身就带有的,这是就无能为力了。如图所示
原文作者:是石头ya
原文地址: https://blog.csdn.net/w8y56f/article/details/108185786
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/w8y56f/article/details/108185786
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章