You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Gradle构建使用Querydsl Jakarta时类找不到错误的解决

Querydsl构建报错:jakarta.persistence.Entity找不到的原因与解决方法

项目Gradle配置

plugins {
    id 'org.springframework.boot' version '3.0.6'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

group = 'com.example'
version = '1.0'
sourceCompatibility = 17
targetCompatibility = 17

repositories {
    mavenCentral()
}

dependencyManagement {
    imports {
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:2022.0.2'
    }
}

sourceSets {
  generated {
    java {
      srcDirs = ['build/generated/sources/annotationProcessor/java/main']
    }
  }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    implementation 'org.springframework.boot:spring-boot-starter-data-rest' 
    annotationProcessor 'org.projectlombok:lombok'
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
    
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc'
    runtimeOnly 'de.codecentric:spring-boot-admin-starter-client:3.0.2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'
}

构建报错信息

Caused by: java.lang.NoClassDefFoundError: jakarta/persistence/Entity

2023-05-10T11:55:22.519-0500 [ERROR]
[org.gradle.internal.buildevents.BuildExceptionReporter] at
com.querydsl.apt.jpa.JPAAnnotationProcessor.createConfiguration(JPAAnnotationProcessor.java:37)

报错原因

尽管spring-boot-starter-data-jpa已经间接引入了jakarta.persistence-api,但该依赖是通过implementation scope引入的——Gradle中,implementation依赖只会被添加到主编译和运行时类路径,不会自动传递到注解处理器的类路径。而Querydsl的JPA注解处理器(querydsl-apt)在运行时需要读取jakarta.persistence.Entity这类JPA注解类,因此会出现找不到类的错误。

解决方法

将jakarta.persistence-api添加到注解处理器的依赖中,让Querydsl的APT工具能访问到JPA API类:

修改dependencies块,新增一行:

annotationProcessor 'jakarta.persistence:jakarta.persistence-api'

修改后的完整dependencies块关键部分如下:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // ... 其他原有依赖
    annotationProcessor 'org.projectlombok:lombok'
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
    annotationProcessor 'jakarta.persistence:jakarta.persistence-api' // 新增这行
    // ... 其他原有依赖
}

添加后重新执行构建,注解处理器就能找到jakarta.persistence.Entity类,报错即可解决。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:02:47