让 QueryDSL 和 lombok 一起工作并不简单,特别是因为 querydsl 的 gradle 文档最多也缺乏。
我想避免使用仍然依赖于
compile
配置的自动插件,或者在破坏其他系统的额外任务中进行黑客攻击(例如 intellij idea 构建)。
完成所有不起作用的事情将花费我一段时间,所以我将这个问题和答案留给其他人(可能还有我未来的自己)。
这是(到目前为止)正确考虑 queryDSL 和 lombok 的编译步骤的最简单方法。 spring-data-mongo 对注释处理器的启动要求可能有点过大,并且可以做得更好。
plugins {
id 'java'
id 'org.springframework.boot'
id 'io.spring.dependency-management'
}
repositories {
mavenCentral()
}
sourceCompatibility = '17'
ext{
springBootVersion = "2.7.4"
}
dependencies {
implementation(platform("org.springframework.boot:spring-boot-dependencies:${springBootVersion}"))
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation "org.springframework.boot:spring-boot-starter-test"
testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
}
ext {
queryDslVersion = "5.0.0"
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
//required to use dependency management to find the right versions. Alternatively specify the version in the dependency directly
annotationProcessor(platform("org.springframework.boot:spring-boot-dependencies:${springBootVersion}"))
compileOnly "org.projectlombok:lombok"
annotationProcessor "org.projectlombok:lombok"
testCompileOnly "org.projectlombok:lombok"
testAnnotationProcessor "org.projectlombok:lombok"
//querydsl
implementation("com.querydsl:querydsl-core:${queryDslVersion}")
annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:general")
//I'm lazily using the full starter here to automatically include other annotation dependencies like validation. You could specify them separately/specifically
annotationProcessor('org.springframework.boot:spring-boot-starter-data-mongodb')
}
//adding both annotation processors directly on the compiler options make them work together nicely.
compileJava {
options.compilerArgs += [
"-processor", 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor'
]
}
检查这个小库https://github.com/rahimalizada/spring-data-mongodb-querydsl-processor,我专门启用了自动注释处理,以启用 QueryDSL 和 spring-data-mongo 的自动注释处理.