BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #63034同步于 2019/11/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

两个jar里面有同包名同名的类,如何区分调用?

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