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

标签 java hibernate jersey dependency-management

我目前正在使用 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/

相关文章:

java - 持久化 JPA 域对象的良好设计

java - Swig java 进程 std::pair 与 c++ 中的类

java - 如何删除 neo4j 图中的所有关系?

java - 如何在 Hibernate 中创建 INSERT IGNORE 查询?

spring - Autowiring 字段失败异常

javax.validation.ConstraintDefinitionException : HV000074

java - AWS S3 文件上传与 dropwizard 集成?

java - 没有属性的 getter 方法...错误

java - Jersey - 客户端上设置的 cookie 未到达服务器

java - 获取 Jersey 客户端上 PUT 请求的状态