gpt4 book ai didi

java - Hibernate 和 Jersey 依赖冲突(javassist) - 谁能解释这是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:55:35 25 4
gpt4 key购买 nike

我目前正在使用 hibernate-4.1.4 和 jersey-2.22。它们分别有 javassist-3.15 和 javassist-3.18。

我在我的项目中包含了 hibernate 和 jersey,令我惊讶的是,上述 javassists 之间没有依赖冲突。

我想知道 Java 如何告诉 hibernate 使用 3.15 以及如何告诉 jersey 使用 3.18,因为两者都在构建路径中。是否没有使用一名 Javassist?

后续问题:假设javassist-3.15和javassist-3.18相互冲突。我该如何解决这个问题?我是否要禁用两个 javassists 并在外部添加一个 javassists?

编辑:我的应用程序是一个在 Tomcat 7 上运行的 Web 应用程序。我们不使用 Maven/Gradle。我们只需使用 Eclipse 将 jar 放入构建路径来配置依赖项。

最佳答案

JAVA 通过 ClassLoaders 加载类...许多应用程序服务器,如 Tomcat 或 Wildfly,实现并使用自己的类加载器(不是常见 JDK 的常规类加载器)...因此您必须查看 Tomcat 文档来阅读有关内容它的类加载行为...

话虽如此,Tomcat 很可能是按字母顺序加载库的。我解释一下...

假设您使用名为:Dummy 的类,此类包含在库中: dummy-1.0.jardummy-1.1.jar ...上课时Dummy收到请求后,Tomcat 类加载器会搜索该类定义,首先查看 dummy-1.0.jar稍后在 dummy-1.1.jar ...鉴于 dummy-1.0.jar包含该类,Tomcat 停止查找并返回该类版本...如果 dummy-1.0.jar不会有目标类, dummy-1.1.jar类版本将被返回...

(我建议尝试这个来验证容器行为,它并不难实现)...

是的,如果 javassist-3.15javassist-3.18彼此冲突,您应该删除它们并选择 javassist JAR 更多
适用于两个库(jersey 和 hibernate)。

根据经验,我倾向于选择最新的库(版本更高的库),但这种方案并不总是有效......

关于java - Hibernate 和 Jersey 依赖冲突(javassist) - 谁能解释这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com