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

执行./gradlew compileJava生成Qentity时遇Gradle兼容问题

解决Gradle 9.0兼容问题:生成QueryDSL Q实体时的废弃特性警告

问题分析

  • 旧版com.ewerk.gradle.plugins.querydsl插件(v1.0.10)依赖Gradle已废弃的API,无法兼容Gradle 9.0。
  • QueryDSL依赖版本混乱:同时声明4.4.0、5.0.0及Spring Boot依赖管理的版本,存在版本冲突风险。
  • 自定义compileQuerydsl任务不符合Gradle 7+的注解处理器规范。

修复步骤

1. 移除过时的QueryDSL插件

删除plugins块中的id "com.ewerk.gradle.plugins.querydsl" version "1.0.10",改用Gradle原生注解处理器支持,无需第三方插件。

2. 统一QueryDSL版本

借助Spring Boot依赖管理统一版本,删除手动指定的版本号,确保querydsl-jpa与querydsl-apt版本一致:

// 替换原混乱的QueryDSL依赖
implementation 'com.querydsl:querydsl-jpa:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:jakarta'

3. 规范生成目录配置

使用Gradle官方推荐方式配置注解处理器输出目录,替代旧插件的自定义配置:

java {
    sourceCompatibility = '17'
    // 将生成目录加入源码集,Gradle自动编译
    sourceSets.main.java.srcDirs += "$buildDir/generated/querydsl"
}

tasks.withType(JavaCompile) {
    // 指定注解处理器生成文件的目录
    options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated/querydsl")
}

4. 清理冗余依赖

删除重复的annotationProcessor 'com.querydsl:querydsl-apt:4.4.0:jakarta'声明,避免重复配置。

修改后的完整build.gradle

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

group = 'com.learning'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
    sourceSets.main.java.srcDirs += "$buildDir/generated/querydsl"
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydslAnnotationProcessor.extendsFrom compileClasspath
}

repositories {
    mavenCentral()
}

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

    // QueryDSL依赖(统一版本)
    implementation 'com.querydsl:querydsl-jpa:jakarta'
    annotationProcessor 'com.querydsl:querydsl-apt:jakarta'
    annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
    annotationProcessor 'org.projectlombok:lombok'

    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

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

tasks.withType(JavaCompile) {
    options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated/querydsl")
}

验证执行

运行./gradlew compileJava,此时不会再出现Gradle废弃特性警告,Q实体将正确生成在build/generated/querydsl目录下。

注意事项

  • Spring Boot 3.x基于Jakarta EE,必须使用QueryDSL的:jakarta分类器版本。
  • 新版本Gradle中,annotationProcessorGeneratedSourcesDirectory是配置注解处理器输出目录的标准方式,替代了旧插件的自定义任务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:00:55