QueryDSL注解处理器和gradle插件

yduiuuwa  于 2022-11-14  发布在  其他
关注(0)|答案(5)|浏览(174)

无法理解如何配置build.gradle以在没有任何jpa/jdo/mongo的情况下使用querydsl注解处理器。我想使用@QueryEntity注解来生成Q类,这样我就可以使用DSL支持来编写动态SQL查询,然后将查询转换为纯文本并将其提供给Spring R2 DBC DatabaseClient执行器。
是否有一种方法可以使用gradle querydSL apt插件和querydSL注解处理器在build.gradle文件中生成带有@QueryEntity注解的Q类?
我正在使用gradle 5,Spring Data R2 DBC,Sping Boot ,计划将queryDsl与注解处理器集成。
这是我现在的身材

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.1.RELEASE'
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.8"
}

apply plugin: 'io.spring.dependency-management'

group = 'com.whatever'

repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/milestone" }
}

ext {

    springR2dbcVersion = '1.0.0.RELEASE'
    queryDslVersion = '4.2.2'
}

dependencies {
    implementation("com.querydsl:querydsl-sql:${queryDslVersion}")
    implementation("com.querydsl:querydsl-apt:${queryDslVersion}")
    implementation('org.springframework.boot:spring-boot-starter-webflux')

    compileOnly('org.projectlombok:lombok')

    annotationProcessor('org.projectlombok:lombok')
    annotationProcessor('org.springframework.boot:spring-boot-configuration-processor')
    annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}")
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation('io.projectreactor:reactor-test')
}

test {
    useJUnitPlatform()
}
piah890a

piah890a1#

一般来说,你不应该使用QueryDSL插件。为了配置QueryDSL生成,你只需要相关的QueryDSL模块,注解处理器和生成的源目录。例如,与lombok集成,这个配置应该工作(你可能需要玩你需要的确切的QueryDSL模块):

buildscript {
    ext {
        springBootVersion = '${springBootVersion}'
        queryDslVersion = '4.2.2'
        javaxVersion = '1.3.2'
    }
}

plugins {
    id 'idea'
}

idea {
    module {
        sourceDirs += file('generated/')
        generatedSourceDirs += file('generated/')
    }
}

dependencies {
    // QueryDSL
    compile "com.querydsl:querydsl-sql:${queryDslVersion}"
    annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:general")

    // Lombok
    compileOnly "org.projectlombok:lombok:${lombokVersion}"
    annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
    implementation("org.projectlombok:lombok:${lombokVersion}")

    // Possibly annotation processors for additional Data annotations
    annotationProcessor("javax.annotation:javax.annotation-api:${javaxVersion}")

    /* TEST */
    // Querydsl
    testCompile "com.querydsl:querydsl-sql:${queryDslVersion}"
    testAnnotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:general")

    // Lombok
    testImplementation("org.projectlombok:lombok:${lombokVersion}")
    testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
    testCompileOnly("org.projectlombok:lombok:${lombokVersion}")

}

其他信息:https://github.com/querydsl/querydsl/issues/2444#issuecomment-489538997

inkz8wg9

inkz8wg92#

我想在这里留下这个答案,因为我花了几个小时才找到适合Kotlin的解决方案(这个问题没有Java限制,据我所知,关于这个问题的信息真的很少)。Kotlin支持kapt plugin的注解处理。为了在QueryDSL中使用这个插件,你需要1.定义kapt插件,和2.指定将进行处理的依赖项,在本例中为com.querydsl:querydsl-apt。我使用general任务来执行插件,但根据documentation,还有其他选项可用(可能这对JPA、JDO、Hiberante有一些额外的调整)
第一个
现在,无论何时运行gradle build,注解处理都将为用@QueryEntity注解的类触发DSL查询类生成。

nvbavucw

nvbavucw3#

这对我很有效(请在依赖项中遵循完全相同的顺序)

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')

}
8ljdwjyq

8ljdwjyq4#

这很管用!!!

ext {
        queryDslVersion = '4.2.1'
        
    }
    
    sourceSets {
        main {
            java {
                srcDirs = ['src/main/java', 'build/generated/sources/annotationProcessor/java/main']
            }
        }
    }   
    
    
     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"
            )
8nuwlpux

8nuwlpux5#

对于single gradle项目,只需将下一行添加到同一个build.gradle
对于多模块gradle项目,将下面几行添加到build.gradle的模块中,其中是jpa实体:

implementation("com.querydsl:querydsl-core:${queryDslVersion}") 
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")

下一行是build.gradle,其中模块是jpa存储库:

implementation("com.querydsl:querydsl-jpa:${queryDslVersion}")

相关问题