如果将同一个类打包在两个jar文件中,则将调用哪个java类文件?

如果将同一个类打包在两个jar文件中,则将调用哪个java类文件?,第1张

如果将同一个类打包在两个jar文件中,则将调用哪个java类文件?

实际上,它取决于许多因素:

  • 如果两个jar文件都位于同一ClassLoader中,例如Java classpath(

    -cp
    选项),则通常它应该是jar列表顺序中找到的第一个文件。

  • 如果部署在JavaEE容器中(如EAR文件或

    WEB-INF/lib
    WAR文件中),则不能保证容器将在两次启动之间加载相同的类。在这种情况下,唯一肯定的是,
    WEB-INF/classes
    之前搜索
    WEB-INF/lib

  • 在复杂的ClassLoader层次结构中,默认行为是“父先搜索”,但是JavaEE实现引入了诸如父后策略(WebSphere)或由于部署描述符(WebLogic,JBoss / WildFly)进行过滤的机制

一个选项可能是由于该属性而在

meta-INF/MANIFEST.MF
文件中声明jar文件的依赖关系
Class-Path
。它应该在ClassLoader级别强制执行加载顺序,尤其是在开始时,
java -jarmyapp.jar
但它可能取决于JavaEE上下文中的实现。

备注:
在使用开源项目时,提交变更请求并发布您的变更或改进以使社区从中受益可能是公平的。这样,您的项目就可以更新到主流,而在ClassPath中就不会遇到这样的难题。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5565410.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存