【问题标题】:Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1- not generating QClassesJava 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses
【发布时间】:2023-04-08 08:06:01
【问题描述】:

我正在尝试将 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/ 文件夹中。

标签: spring-boot gradle querydsl lombok


【解决方案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://stackoverflow.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 questionplug-in issues 了解更多信息。

      看起来有些人设法让它使用解决方法,例如链接问题中的解决方法,但我的情况并非如此。我的团队最终不得不求助于 HQL。

      【讨论】:

      • 效果很好(我现在正在使用 5.3)。 compileQuerydsl { options.annotationProcessorPath = configurations.querydsl }请看这里stackoverflow.com/questions/53913274/…
      • @Max 这对我不起作用,不幸的是......我要么必须使用 HQL,要么在没有 Gradle 插件的情况下添加 QueryDSL 并手动创建 QClasse。您的项目的配置是什么? Java版、Spring版……和题名一样吗?
      猜你喜欢
      • 2023-04-07
      • 2019-12-14
      • 2017-01-18
      • 2020-09-30
      • 2019-03-25
      • 2020-10-12
      • 1970-01-01
      • 2018-09-20
      • 2020-10-27
      相关资源
      最近更新 更多