带有 Gradle 注释处理器配置的 QueryDSL

QueryDSL with Gradle configuration of annotation processor

我搜索了很多关于 QueryDSLGradle 的配置。 我想配置注释处理器,在生成的 类.

上使用特定的注释 @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”任务中的步骤)我无法删除或覆盖。

如果您只想配置 QueryDSL 处理器,而不专门将注释处理与编译分开,那么您所要做的就是将 -Aquerydsl.generatedAnnotationClass=… 编译器参数传递给 compileJava class。不需要单独的任务。

compileJava {
    options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=com.querydsl.core.annotations.Generated'
}

您问题中的设置问题:

  • -proc:only 禁用编译,仅处理注释和生成代码(在 options.generatedSourceOutputDirectory 中)
  • -processor 仅列出 QueryDSL 处理器将禁用处理器路径中的所有其他注释处理器
  • 该任务被配置为 compileJavafinalizedBy,因此 compileJava 将编译您的代码,应用所有注释处理器,而不需要您要传递给 QueryDSL 的特定配置处理器,然后重新运行具有特定选项但不编译的QueryDSL处理器,因此它将生成源代码(例如用于您的IDE ) 具有正确的配置,但不会编译它,所以编译后的 classes 仍然会有来自未配置的 compileJava 任务
  • 的“错误”配置