返回信息流今天boss提了这样一个问题:在导入的两个不同名jar包中有两个同包同类名的类,在调用时如何区分调用的是哪个(即两个类都要加载进入jvm中)?谢谢回答。
这是一条镜像帖。来源:北邮人论坛 / java / #63034同步于 2019/11/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
两个jar里面有同包名同名的类,如何区分调用?
emptjq
2019/11/15镜像同步44 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你查查类加载器的双亲委派机制,最近复习到这是说,相同的类,在启动类加载器里的类优先级是高于application类加载器里的类的,所以会默认使用优先级高的类加载器的类。
不会冲突,会优先加载pom.xml中下载前面依赖的类。我目前,是这么测得:
准备两个Jar包:testA和testB。这两个Jar包中分别含有类A和B。A和B中方法printTest()共同调用当前所在jar包的一个类PrintAction(自定义)中的同名方法print(),但是各自实现却不同。
这个时候,你的新项目中,需要同时引用这两个Jar包,并且同时调用了这两个Jar中printTest()方法,他们得到的结果是相同的。就是排在前面的那个依赖中方法的实现的结果。
【 在 lzlz 的大作中提到: 】
: 会冲突吧
这个我清楚,现在想做的就是怎么解决这个问题?之前准备使用jarsLink,但是感觉不太可行,就没尝试了
【 在 poetry 的大作中提到: 】
: 你查查类加载器的双亲委派机制,最近复习到这是说,相同的类,在启动类加载器里的类优先级是高于application类加载器里的类的,所以会默认使用优先级高的类加载器的类。
非常好的实验精神
但结论具有误导性
【 在 emptjq 的大作中提到: 】
: 不会冲突,会优先加载pom.xml中下载前面依赖的类。我目前,是这么测得:
: 准备两个Jar包:testA和testB。这两个Jar包中分别含有类A和B。A和B中方法printTest()共同调用当前所在jar包的一个类PrintAction(自定义)中的同名方法print(),但是各自实现却不同。
: 这个时候,你的新项目中,需要同时引用这两个Jar包,并且同时调用了这两个Jar中printTest()方法,他们得到的结果是相同的。就是排在前面的那个依赖中方法的实现的结果。
你好,因为我现在主要做调研工作,尽可能多的找到在合适场景下合适的方法。目前已经知道shade可以使用,现在就想看看能不能找找其他方法也能完成这个事。
【 在 sanchengzhu 的大作中提到: 】
: 在maven中利用shade插件将引入的包重命名?