QueryDSL 与注解处理器的 Gradle 配置
Posted
技术标签:
【中文标题】QueryDSL 与注解处理器的 Gradle 配置【英文标题】:QueryDSL with Gradle configuration of annotation processor 【发布时间】:2021-12-21 10:00:25 【问题描述】:我搜索了很多关于QueryDSL
和Gradle
的配置。
我想配置注解处理器,在生成的类上使用特定的注解@Generated
。
这是我的build.gradle
(续):
plugins
id 'java'
dependencies
implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.5.6'
annotationProcessor 'org.springframework.boot:spring-boot-starter-data-jpa:2.5.6'
implementation 'com.querydsl:querydsl-jpa:5.0.0'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"
compileJava
finalizedBy 'generateQueryDSL'
task generateQueryDSL(type: JavaCompile)
source = sourceSets.main.java.srcDirs
classpath = sourceSets.main.compileClasspath
getDestinationDirectory().set(file("$buildDir/generated/sources/annotationProcessor/java/main"))
options.annotationProcessorPath = configurations.annotationProcessor
options.compilerArgs = [
'-proc:only',
'-processor',
'com.querydsl.apt.jpa.JPAAnnotationProcessor',
'-Aquerydsl.generatedAnnotationClass=com.querydsl.core.annotations.Generated'
]
有没有更简单的方法来配置注释处理器? 我在使用这种方法时遇到了很多麻烦,因为原始方法不断使用 OLD 注释更改文件,因为我无法替换这种旧行为。有了这个,我无法删除或覆盖一些任务(或“compileJava”任务中的步骤)。
【问题讨论】:
【参考方案1】:如果您要做的只是配置 QueryDSL 处理器,而不是专门将注释处理与编译分开,那么您所要做的就是将 -Aquerydsl.generatedAnnotationClass=…
编译器参数传递给 compileJava
类。无需单独的任务。
compileJava
options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=com.querydsl.core.annotations.Generated'
您的问题中的设置问题:
-proc:only
禁用编译,只处理注释和生成代码(在options.generatedSourceOutputDirectory
中)
-processor
仅列出 QueryDSL 处理器将禁用处理器路径中的所有其他注释处理器
该任务配置为compileJava
的finalizedBy
,因此compileJava
将编译您的代码,应用所有注释处理器,而不需要您想要传递给QueryDSL 处理器的特定配置,并且只有这样 使用特定选项但不编译重新运行 QueryDSL 处理器,因此它会生成具有正确配置的源代码(例如,用于您的 IDE),但不会编译它,因此编译的类仍然会来自未配置的compileJava
任务的“错误”配置
【讨论】:
以上是关于QueryDSL 与注解处理器的 Gradle 配置的主要内容,如果未能解决你的问题,请参考以下文章
带有 QueryDSL 和 Gradle 的 IntelliJ 15
QueryDSL:使用 Kotlin 和 Gradle 生成类失败
Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses