带有 Gradle 注释处理器配置的 QueryDSL
QueryDSL with Gradle configuration of annotation processor
我搜索了很多关于 QueryDSL
和 Gradle
的配置。
我想配置注释处理器,在生成的 类.
上使用特定的注释 @Generated
- 但我只能在这里找到 link: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”任务中的步骤)我无法删除或覆盖。
如果您只想配置 QueryDSL 处理器,而不专门将注释处理与编译分开,那么您所要做的就是将 -Aquerydsl.generatedAnnotationClass=…
编译器参数传递给 compileJava
class。不需要单独的任务。
compileJava {
options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=com.querydsl.core.annotations.Generated'
}
您问题中的设置问题:
-proc:only
禁用编译,仅处理注释和生成代码(在 options.generatedSourceOutputDirectory
中)
-processor
仅列出 QueryDSL 处理器将禁用处理器路径中的所有其他注释处理器
- 该任务被配置为
compileJava
的 finalizedBy
,因此 compileJava
将编译您的代码,应用所有注释处理器,而不需要您要传递给 QueryDSL 的特定配置处理器,然后重新运行具有特定选项但不编译的QueryDSL处理器,因此它将生成源代码(例如用于您的IDE ) 具有正确的配置,但不会编译它,所以编译后的 classes 仍然会有来自未配置的 compileJava
任务 的“错误”配置
我搜索了很多关于 QueryDSL
和 Gradle
的配置。
我想配置注释处理器,在生成的 类.
@Generated
- 但我只能在这里找到 link: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”任务中的步骤)我无法删除或覆盖。
如果您只想配置 QueryDSL 处理器,而不专门将注释处理与编译分开,那么您所要做的就是将 -Aquerydsl.generatedAnnotationClass=…
编译器参数传递给 compileJava
class。不需要单独的任务。
compileJava {
options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=com.querydsl.core.annotations.Generated'
}
您问题中的设置问题:
-proc:only
禁用编译,仅处理注释和生成代码(在options.generatedSourceOutputDirectory
中)-processor
仅列出 QueryDSL 处理器将禁用处理器路径中的所有其他注释处理器- 该任务被配置为
compileJava
的finalizedBy
,因此compileJava
将编译您的代码,应用所有注释处理器,而不需要您要传递给 QueryDSL 的特定配置处理器,然后重新运行具有特定选项但不编译的QueryDSL处理器,因此它将生成源代码(例如用于您的IDE ) 具有正确的配置,但不会编译它,所以编译后的 classes 仍然会有来自未配置的compileJava
任务 的“错误”配置