QueryDSL 与注解处理器的 Gradle 配置

Posted

技术标签:

【中文标题】QueryDSL 与注解处理器的 Gradle 配置【英文标题】:QueryDSL with Gradle configuration of annotation processor 【发布时间】:2021-12-21 10:00:25 【问题描述】:

我搜索了很多关于QueryDSLGradle 的配置。 我想配置注解处理器,在生成的类上使用特定的注解@Generated

但我只能在这里找到这个链接:Gradle : Unable to generate QueryDSL classes。这有助于我了解一些细节。 以及显示可用选项的官方文档:https://querydsl.com/static/querydsl/latest/reference/html/ch03s03.html(3.3.2. 自定义)。

这是我的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 处理器将禁用处理器路径中的所有其他注释处理器 该任务配置为compileJavafinalizedBy,因此compileJava 将编译您的代码,应用所有注释处理器,而不需要您想要传递给QueryDSL 处理器的特定配置,并且只有这样 使用特定选项但不编译重新运行 QueryDSL 处理器,因此它会生成具有正确配置的源代码(例如,用于您的 IDE),但不会编译它,因此编译的类仍然会来自未配置的compileJava 任务的“错误”配置

【讨论】:

以上是关于QueryDSL 与注解处理器的 Gradle 配置的主要内容,如果未能解决你的问题,请参考以下文章

QueryDSL、spring-boot 和 Gradle

带有 QueryDSL 和 Gradle 的 IntelliJ 15

QueryDSL:使用 Kotlin 和 Gradle 生成类失败

Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses

如何让 QueryDSL 和 Lombok 协同工作

Querydsl mongodb gradle springboot问题