Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses
Posted
技术标签:
【中文标题】Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses【英文标题】:Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1- not generating QClasses 【发布时间】:2019-06-05 15:55:28 【问题描述】:我正在尝试将 QueryDSL、Gradle 和 Springboot 集成到标题中的版本中。 我在 gradle 中添加了 annotationProcessors,但 Intellij 仍然没有生成 QClasses。我尝试了来自社区的建议以使用插件“gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin” 但这没有帮助。
dependencies
annotationProcessor("org.projectlombok:lombok:1.18.4")
annotationProcessor("com.querydsl:querydsl-apt:4.2.1")
annotationProcessor("org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE")
compileOnly("org.projectlombok:lombok:1.18.4")
implementation("com.querydsl:querydsl-jpa:4.2.1")
implementation("com.querydsl:querydsl-apt:4.2.1:jpa")
implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE")
implementation("org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE")
【问题讨论】:
你能发布更多你的配置吗?因为在我的情况下,它将生成的文件放在 build/class/java/main/ 文件夹中。 【参考方案1】:你需要提供具体的注解处理器':jpa'
annotationProcessor("com.querydsl:querydsl-apt:4.2.1:jpa")
应该可以的:
dependencies
annotationProcessor("org.projectlombok:lombok:1.18.4")
annotationProcessor("com.querydsl:querydsl-apt:4.2.1:jpa")
annotationProcessor("org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE")
compileOnly("org.projectlombok:lombok:1.18.4")
implementation("com.querydsl:querydsl-jpa:4.2.1")
implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE")
implementation("org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE")
【讨论】:
annotationProcessor("com.querydsl:querydsl-apt:4.2.1:jpa") 对我不起作用。未找到 Gradle 消息注释处理器“com.querydsl.apt.jpa.JPAAnnotationProcessor”。我有什么遗漏吗?使用 gradle 5.4 和 jdk 8 @TosKen 查看我的答案,我遇到了同样的问题【参考方案2】:我会给你我的工作配置:
ext
queryDslVersion = '4.2.1'
lombokVersion = '1.8.6'
// https://***.com/questions/42441844/annotation-processor-in-intellij-and-gradle/54611475#54611475
compileJava
options.annotationProcessorPath = configurations.annotationProcessor
dependencies
// ...
compile(
"com.querydsl:querydsl-core:$queryDslVersion",
"com.querydsl:querydsl-jpa:$queryDslVersion"
)
compileOnly "org.projectlombok:lombok:$lombokVersion"
annotationProcessor "com.querydsl:querydsl-apt:$queryDslVersion:jpa",
"org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final",
"javax.annotation:javax.annotation-api:1.3.2",
"org.projectlombok:lombok:$lombokVersion"
使用 Gradle 5.2+
【讨论】:
这适用于我在 Gradle 5.6 中只有annotationProcessor "com.querydsl:querydsl-apt:4.2.2:jpa", "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final"
。
@TecHunter 这对我来说不适用于Gradle 5.1
。我仍然遇到与 OP 相同的错误,即 java.lang.IllegalArgumentException: Annotation processor 'com.querydsl.apt.jpa.JPAAnnotationProcessor' not found
@DarshanMehta 尝试 gradle 5.2+,除非您受版本限制
@TecHunter 不幸的是,由于限制,我不得不坚持使用5.1
@DarshanMehta 发布另一个具有此特殊性的 SO 问题并参考此帖子。帮不了你很抱歉【参考方案3】:
按照完全相同的顺序进行
sourceSets
generated
java
srcDirs = ['build/generated/sources/annotationProcessor/java/main']
dependencies
api 'com.querydsl:querydsl-jpa:4.4.0'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor('com.querydsl:querydsl-apt:4.4.0:jpa')
annotationProcessor('javax.annotation:javax.annotation-api')
【讨论】:
【参考方案4】:这在 intellij 中有效!!
ext
queryDslVersion = '4.2.1'
idea
module
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
dependencies
compile("com.querydsl:querydsl-core:$queryDslVersion")
compile("com.querydsl:querydsl-jpa:$queryDslVersion")
dependencies
compile "com.querydsl:querydsl-jpa:$queryDslVersion"
compileOnly 'org.projectlombok:lombok:1.16.18'
annotationProcessor(
"com.querydsl:querydsl-apt:$queryDslVersion:jpa",
"org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final",
"javax.annotation:javax.annotation-api:1.3.2",
"org.projectlombok:lombok"
)
【讨论】:
【参考方案5】:QueryDSL 不适用于 Gradle 5。您可以查看 this other question 和 plug-in issues 了解更多信息。
看起来有些人设法让它使用解决方法,例如链接问题中的解决方法,但我的情况并非如此。我的团队最终不得不求助于 HQL。
【讨论】:
效果很好(我现在正在使用 5.3)。compileQuerydsl options.annotationProcessorPath = configurations.querydsl
请看这里***.com/questions/53913274/…
@Max 这对我不起作用,不幸的是......我要么必须使用 HQL,要么在没有 Gradle 插件的情况下添加 QueryDSL 并手动创建 QClasse。您的项目的配置是什么? Java版、Spring版……和题名一样吗?以上是关于Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses的主要内容,如果未能解决你的问题,请参考以下文章
带有 QueryDSL 和 Gradle 的 IntelliJ 15