当前位置: 首页 > 知识库问答 >
问题:

升级到Gradle 5后Querydsl注释处理器问题

卢黎明
2023-03-14

我有一个gradle脚本,它从Mongo注释的实体生成querydsl类。到目前为止,它还在工作,但升级到Gradle 5后,我遇到了一个问题:

* What went wrong:
Execution failed for task ':myproject-common:compileQuerydsl'.
Annotation processor 'org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor' not found

请找到我的gradle。下面是构建脚本。你知道怎么回事吗?我读到Gradle 5中有一个变化,即编译期间默认不使用注释处理器,应该添加注释处理器声明,但当我将其添加到依赖项时,会出现相同的错误。

plugins {
    id 'org.springframework.boot' version '2.0.4.RELEASE'
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
repositories {
    mavenCentral()
}
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
jar {
    enabled = true
    baseName = 'myproject-common'
    version =  '0.0.1-SNAPSHOT'
}
// do no package commons into fat jar
bootJar {
    enabled = false
}
querydsl {
    library = 'com.querydsl:querydsl-apt:4.1.4'
    querydslSourcesDir = 'src/main/querydsl'
    springDataMongo = true
}
sourceCompatibility = 11.0
targetCompatibility = 11.0
sourceSets {
    main {
        java {
            srcDirs = ['src/main/java', 'src/main/querydsl']
        }
    }
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.data:spring-data-mongodb")
    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile("org.springframework.boot:spring-boot-starter-security")
    compile("com.fasterxml.jackson.datatype:jackson-datatype-    jsr310:2.8.6")
    compile("com.google.guava:guava:23.0")
    compile("commons-io:commons-io:2.5")
    compile("org.aspectj:aspectjweaver:1.8.9")
    compile("org.apache.commons:commons-lang3:3.5")
    compile("commons-collections:commons-collections:3.2.2")
    compile("org.javamoney:moneta:1.1")
    compile("com.fizzed:rocker-runtime:1.2.0")
    compile("com.querydsl:querydsl-core:4.1.4")
    compile("com.querydsl:querydsl-mongodb:4.1.4")
    compile("com.querydsl:querydsl-apt:4.1.4")
    compile("com.codepoetics:protonpack:1.15")

    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("org.assertj:assertj-core:3.7.0")
}

共有3个答案

华星剑
2023-03-14

我可以通过添加以下两个依赖项来解决这个问题。

annotationProcessor "com.querydsl:querydsl-apt:4.2.1:jpa"
annotationProcessor 'javax.annotation:javax.annotation-api:1.3.1'

第二种依赖性是它不适用于我的一个隐藏原因。

马朝斑
2023-03-14

我终于找到了一个解决方法。Querydsl与Gradle 5缺乏兼容性在这里报告为一个错误:https://github.com/ewerk/gradle-plugins/issues/108

解决方法是添加到gradle脚本:

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}
艾凌龙
2023-03-14

这是我在不使用其他插件的情况下对JPA的工作配置。Gradle 5.3,openjdk 11.0.2。

plugins {
    id 'java-library'
}

ext {
    springBootVersion = '2.2.0.M1'
    queryDslVersion = '4.2.1'
}

dependencies {
    api(
            "com.querydsl:querydsl-jpa:$queryDslVersion"
    )

    implementation(
            platform("org.springframework.boot:spring-boot-dependencies:$springBootVersion"),
            'org.springframework.boot:spring-boot-starter-validation',
            'org.springframework.boot:spring-boot-starter-data-jpa',
            'org.liquibase:liquibase-core',
            'org.postgresql:postgresql'
    )

    annotationProcessor(
            platform("org.springframework.boot:spring-boot-dependencies:$springBootVersion"),
            'jakarta.persistence:jakarta.persistence-api',
            'jakarta.annotation:jakarta.annotation-api',
            "com.querydsl:querydsl-apt:$queryDslVersion:jpa"

    )
}

请注意注释处理器。它有后缀“:jpa”。也许这就是你错过的。要为mongodb激活同一个,您应该添加“:morphia”后缀。

请同时查看以下两个依赖项:

'jakarta.persistence:jakarta.persistence-api'
'jakarta.annotation:jakarta.annotation-api'

这是此处描述的问题的解决方法:https://discuss.gradle.org/t/annotationprocessor-querydsl-java-lang-noclassdeffounderror/27107它们应该是注释处理器的传递依赖项,但它们还不是。可能您还必须将一些mongo依赖项包含到anNotationProcess中。生成的源代码位于\build\城\源\anNotationProcser\java\main

 类似资料:
  • 我是一名android开发人员,但这对java开发人员来说是一个问题:我在注释处理器行为方面遇到了一些棘手的问题。 现在我一直在开发两个项目:一个-具有自定义注释和处理这些自定义注释的处理器(lib-project)和使用此lib-project(test-project)的测试应用程序。我使用Eclipse IDE作为开发人员工具(ADT)。 我遇到了这样一个麻烦:我的lib项目作为jar li

  • 无法理解如何配置build.gradle以便在没有任何JPA/JDO/Mongo的情况下使用querydsl注释处理器。我想使用@QueryEntity注释生成Q类,这样我就可以使用DSL支持编写动态SQL查询,然后将查询转换为纯文本并提供给Spring R2DBC DatabaseClient Executor。 我正在使用Gradle5,Spring Data R2DBC,Spring Boo

  • 需要注释处理器的帮助。我创建了一个简单的注释处理器,它使用@autoservice注释来检查注释的字段是否为最终字段。但它没有显示任何编译时错误。这是我的配置 注释: 注释处理器: pom文件: 测试文件:

  • 本文向大家介绍android studio 3.6.1升级后如何处理 flutter问题,包括了android studio 3.6.1升级后如何处理 flutter问题的使用技巧和注意事项,需要的朋友参考一下 前提条件介绍 1.android-studio-3.6.1 死丢丢 配置了dart 和flutter插件 在 3.5.3时 成功运行过flutter工程 2.flutter 版本 问题:今

  • 方法一:利用BIOS Boot Block引导块 现在用Award BIOS的主板都有一个BIOS引导块,当你升级BIOS时,这一小部分引导块可以不被覆盖(BootBlock Write 跳线设置为“Disable”,并且在运行Flash程序时,不选择“UpdateBIOS Including Boot Block”方式)。这个BIOS引导块只支持软驱和ISA显示卡,所以很多人在升级BIOS失败后

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?