执行./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
相关产品推荐
相关产品推荐

