首页 > 解决方案 > 当我们创建具有不同选项的可运行 jar 时,JVM 类加载器序列/副作用是什么?

问题描述

当我们在 eclipse 中创建可运行的 jar 时使用两个选项之一提取或打包所需的库时,JVM 如何加载该类单击以获取详细信息。

今天我遇到了一个问题,我的主应用程序使用的是 hibernate-core.jar,但是我的主应用程序所依赖的一个 jar 是使用 hibernate-core-5...jar,当这个依赖 jar 是使用第二个选项构建时(包),一切正常,但是当我切换到第一个选项来构建这个 jar(提取)时,我开始遇到错误。

Caused by: java.lang.ClassCastException: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider cannot be cast to org.hibernate.engine.jdbc.connections.spi.ConnectionProvider

根据SO,这是由于版本不匹配而发生的,我认为当我使用提取选项构建 jar 时,这正是发生在我身上。

我的主应用程序使用 spring+hibernate(3),但我的依赖 jar 只使用 hibernate(5)。

我可以从日志中解释的是 connectionProvider(hibernate 5) 无法使用 LocalDataSourceConnectionProvider (hibernate 3) 实例化。可能是休眠 5 的实现没有加载到 JVM 中。

在可运行 jar 中打包 .class 文件或 .jar 是否会改变类在 JVM 中的加载方式?

标签: javaspringhibernatejvmclassloader

解决方案


推荐阅读