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

Spring Boot 3.0.2集成QueryDSL时Q文件重复生成错误排查

问题分析与解决方案

错误原因

Attempt to recreate a file for type com.joshua.system.common.audit.QTimeEntity 是因为QueryDSL的Q文件被重复生成,核心原因是APT注解处理器被多次触发。结合你的Gradle配置,问题出在第三方QueryDSL插件与原生annotationProcessor配置冲突,同时存在依赖版本不一致的情况。

Spring Boot 3.x 对 QueryDSL 的影响

Spring Boot 3.x 全面切换到Jakarta EE规范(替代原Java EE),QueryDSL需要适配这一变化:

  • 必须使用带:jakarta后缀的依赖包(如com.querydsl:querydsl-jpa:5.0.0:jakarta)
  • APT处理器也要对应选择Jakarta版本
  • Gradle 7+原生支持通过annotationProcessor配置生成Q文件,不再强制依赖第三方插件

修正后的Gradle配置

移除冲突插件与重复配置,统一依赖版本:

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

group = 'com.joshua'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

ext {
    set('springCloudVersion', "2022.0.1")
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-hateoas'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    implementation 'org.springframework.cloud:spring-cloud-starter-config'
    implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'org.springframework.cloud:spring-cloud-circuitbreaker-resilience4j'
    implementation 'org.springframework.cloud:spring-cloud-starter-sleuth'
    implementation 'org.springframework.cloud:spring-cloud-starter-zipkin:2.2.8.RELEASE'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

    implementation 'org.projectlombok:lombok'
    implementation 'org.mapstruct:mapstruct:1.5.5.Final'
    implementation 'org.modelmapper:modelmapper:2.3.8'
    implementation 'io.micrometer:micrometer-registry-prometheus'
    implementation 'io.jsonwebtoken:jjwt:0.9.1'
    implementation 'org.junit.jupiter:junit-jupiter:5.9.0'

    // QueryDSL Jakarta 适配版本
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'

    annotationProcessor([
        "org.projectlombok:lombok",
        "org.mapstruct:mapstruct-processor:1.5.5.Final", // 与implementation版本统一
        "com.querydsl:querydsl-apt:5.0.0:jakarta",
        "jakarta.persistence:jakarta.persistence-api",
        "jakarta.annotation:jakarta.annotation-api"
    ])

    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'

    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

// 配置QueryDSL生成目录,避免与其他生成文件冲突
def querydslDir = "$buildDir/generated/querydsl"

sourceSets {
    main.java.srcDirs += querydslDir
}

// 确保clean时删除生成目录,避免旧文件残留
tasks.clean.doLast {
    file(querydslDir).deleteDir()
}

关键修改点说明

  1. 移除第三方QueryDSL插件:com.ewerk.gradle.plugins.querydsl 插件与原生annotationProcessor配置冲突,导致重复生成Q文件,Gradle 7+原生方式即可满足需求。
  2. 统一MapStruct版本:将annotationProcessor中的mapstruct-processor版本改为与implementation一致的1.5.5.Final,消除依赖冲突。
  3. 清理重复配置:删除重复定义的configurations { compileOnly { extendsFrom annotationProcessor } }。
  4. 添加生成目录清理:在clean任务中删除QueryDSL生成目录,避免旧文件残留引发的重复生成问题。

执行clean build即可解决当前错误。

内容的提问来源于stack exchange,提问作者joshua.kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:32:12