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 更新 JPA 实体?

使 JPQL/QueryDSL 不会产生可怕的查询

带有 QueryDSL 和 Gradle 的 IntelliJ 15

Spring Boot 测试不适用于 Java 11

比较 Querydsl、jOOQ、JEQUEL、activejdbc、iciql 和其他查询 DSL

QueryDSL 4 与 RowNumber Window 功能