java - 当我们创建具有不同选项的可运行 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 中的加载方式?
解决方案
推荐阅读
- java - Spring Security 中的错误,状态码为 404
- java - 从 ArrayList-Member 中删除项目后将对象写入 FirebaseDatabase 时出现 InvocationTargetException
- java - 将对象集映射到字符串集
- sql - 来自 SCD2 维度变化的事实表中的重复行
- django - Stripe Webhooks:Invoice.paid 与 Checkout.Session.Completed
- c# - 如何获取 Microsoft Common Data Service 表的连接字符串?
- android - 为什么 Android Studio 在默认文件中显示错误
- python - 具有多个条件和不同更新的 SQLite 命令
- javascript - 防止表单提交 jQuery
- python - 当每个文件名不包含日期时,使用 Python 从一系列文件名中删除日期?