使用 Spring boot 时的两个版本的 Hibernate
Posted
技术标签:
【中文标题】使用 Spring boot 时的两个版本的 Hibernate【英文标题】:Two versions of Hibernate when use Spring boot 【发布时间】:2019-10-01 11:50:16 【问题描述】:我在 build.gradle 文件中明确指定了最新的 Hibernate 版本。在运行构建后,我发现我的依赖库列表中出现了两个不同版本的 Hibernate jar 文件。 Spring boot 引入了较低版本,即使我想使用 5.4.2.Final。我应该使用 Spring boot 引入的版本还是有办法用更新的版本覆盖它?
我做了一些研究,但没有找到我想要的答案。
【问题讨论】:
你更新了 hibernate.version 属性吗? 你的问题有道理。我在父母手下有多个项目,我没有在其中一个孩子项目中指定休眠。因此,休眠版本隐式地取自 Spring boot。当然,下面列出的答案解决了主要问题。 【参考方案1】:参见 Excluding transitive dependencies :您可以从 Springboot 传递依赖项中排除 hibernate
库,以强制 Gradle 使用您的版本。
首先你需要分析哪个Springboot依赖依赖于hibernate-core
(一般是"org.springframework.boot:spring-boot-starter-data-jpa"
):为此你可以使用gradledependencies
任务来浏览依赖图。
然后您可以按照文档中的说明排除特定的传递依赖:
dependencies
implementation ("org.springframework.boot:spring-boot-starter-data-jpa")
exclude group: "org.hibernate", module: "hibernate-core"
implementation "org.hibernate:hibernate-core:5.4.2.Final"
...
注意升级hibernate-core
版本可能会对Spring Jpa 相关库的行为产生副作用(确保您使用的Springboot 版本与hibernate
的新版本兼容)
编辑:还有其他方法可以定义传递依赖约束,请参考官方文档(例如:Customizing Dependency Resolution Behavior)
【讨论】:
以上是关于使用 Spring boot 时的两个版本的 Hibernate的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cloud Config Server 时的 Spring Boot 外部配置顺序?
企业级spring-boot案例-Spring Boot 启动时的运行方法
企业级spring-boot案例-Spring Boot 启动时的运行方法