Spring Boot 3.1.2集成Hibernate ORM插件Gradle构建失败求助
问题
在IntelliJ中创建了基于Spring Boot 3.1.2的初始项目,未修改任何代码,但执行Gradle构建时失败。移除org.hibernate.orm插件后构建可正常完成,尝试多种方法仍无法解决。
build.gradle.kts 内容
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "3.1.2" id("io.spring.dependency-management") version "1.1.2" id("org.hibernate.orm") version "6.2.6.Final" id("org.graalvm.buildtools.native") version "0.9.23" kotlin("jvm") version "1.8.22" kotlin("plugin.spring") version "1.8.22" kotlin("plugin.jpa") version "1.8.22" } group = "com.example" version = "0.0.1-SNAPSHOT" java { sourceCompatibility = JavaVersion.VERSION_17 } configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.flywaydb:flyway-core") implementation("org.jetbrains.kotlin:kotlin-reflect") developmentOnly("org.springframework.boot:spring-boot-devtools") developmentOnly("org.springframework.boot:spring-boot-docker-compose") runtimeOnly("com.h2database:h2") runtimeOnly("org.postgresql:postgresql") annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") testImplementation("org.springframework.boot:spring-boot-starter-test") } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs += "-Xjsr305=strict" jvmTarget = "17" } } tasks.withType<Test> { useJUnitPlatform() } hibernate { enhancement { enableAssociationManagement.set(true) } }
构建错误信息
构建文件'/Users/daeyeonjoo/Examples/demo2/build.gradle.kts'第3行 应用插件请求[id: 'org.hibernate.orm', version: '6.2.6.Final']时发生异常 > 无法应用插件'org.hibernate.orm'。 > 无法创建org.hibernate.orm.tooling.gradle.HibernateOrmSpec类型的实例。 > 不存在JavaPluginExtension类型的扩展。当前已注册的扩展类型:[ExtraPropertiesExtension, SpringBootExtension, StandardDependencyManagementExtension, SourceSetContainer] * 尝试: > 使用--info或--debug选项获取更多日志输出。 > 使用--scan获取完整分析信息。 > 访问https://help.gradle.org获取更多帮助。 * 异常详情: org.gradle.api.plugins.InvalidPluginException: 应用插件请求[id: 'org.hibernate.orm', version: '6.2.6.Final']时发生异常 at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:222) ...(省略后续栈追踪内容)
解决方案
错误核心是org.hibernate.orm插件依赖Java插件的扩展,但当前插件加载顺序导致Java插件还未初始化就加载了Hibernate插件。以下是几种可行的解决方式:
- 调整插件加载顺序:把
kotlin("jvm")插件移到org.hibernate.orm之前加载。因为Kotlin JVM插件会自动应用Java插件,确保Hibernate插件加载时Java插件的扩展已经存在。修改后的plugins块如下:
plugins { id("org.springframework.boot") version "3.1.2" id("io.spring.dependency-management") version "1.1.2" kotlin("jvm") version "1.8.22" kotlin("plugin.spring") version "1.8.22" kotlin("plugin.jpa") version "1.8.22" id("org.hibernate.orm") version "6.2.6.Final" id("org.graalvm.buildtools.native") version "0.9.23" }
- 显式应用Java插件:如果不想调整顺序,可以在
org.hibernate.orm插件前显式添加Java插件的引用:
plugins { id("java") id("org.springframework.boot") version "3.1.2" id("io.spring.dependency-management") version "1.1.2" id("org.hibernate.orm") version "6.2.6.Final" // 其他插件... }
- 使用Spring Boot的Hibernate增强替代:Spring Boot已经集成了Hibernate字节码增强的支持,不需要单独引入
org.hibernate.orm插件。可以移除该插件,然后在build.gradle.kts中添加以下配置来启用关联管理增强:
tasks.withType<JavaCompile> { options.compilerArgs.add("-Xplugin:org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor") } dependencies { annotationProcessor("org.hibernate:hibernate-jpamodelgen:6.2.6.Final") }
这样既可以实现相同的关联管理功能,又避免了插件冲突问题。
内容的提问来源于stack exchange,提问作者Daeyeon Joo
相关产品推荐
相关产品推荐

