Hibernate 6.1.0 Gradle插件hibernateEnhance无法解析compileOnly依赖
Hibernate Gradle插件6.x版本hibernateEnhance任务报错修复
问题背景
将项目使用的Hibernate Gradle插件从5.6.9.Final升级至6.1.0.Final时,配置调整如下:
5.6.9.Final版本配置
buildscript { repositories { mavenCentral() } dependencies { classpath 'org.hibernate:hibernate-gradle-plugin:5.6.9.Final' } } apply plugin: 'org.hibernate.orm' repositories { mavenCentral() } hibernate { enhance { enableLazyInitialization = true enableDirtyTracking = true } }
6.1.0.Final版本配置
plugins { id 'org.hibernate.orm' version '6.1.0.Final' } repositories { mavenCentral() } hibernate { enhancement { lazyInitialization = true dirtyTracking = true } }
升级后插件新增3个内置Gradle任务:
compileJpaMetamodelgenerateJpaMetamodelhibernateEnhance
问题现象
项目中引入compileOnly类型依赖时,hibernateEnhance任务会执行失败,哪怕将依赖声明从compileOnly调整为implementation配置,问题仍然无法解决。触发问题的依赖配置示例如下:
dependencies { compileOnly 'javax.servlet:javax.servlet-api:4.0.1' }
修复方案
问题根因是6.1.0.Final版本的Hibernate Gradle插件中,hibernateEnhance任务默认没有关联项目的编译类路径,执行字节码增强时无法扫描到编译期引入的依赖,触发类找不到错误。
在build.gradle中添加如下配置,手动给增强任务指定编译类路径即可解决:
hibernateEnhance { classpath = configurations.compileClasspath }
多模块项目可将该配置放在根项目的subprojects配置块中,对所有子模块统一生效,无需逐模块重复添加。配置完成后重新执行构建,任务即可正常运行。
内容的提问来源于stack exchange,提问作者stefan-dan
相关产品推荐
相关产品推荐

