【问题标题】:Java QueryDSL and Gradle Kotlin DSLJava QueryDSL 和 Gradle Kotlin DSL
【发布时间】:2019-03-22 03:38:12
【问题描述】:

我们正在将我们的 Groovy gradle 构建文件迁移到 KotlinDSL,但我一直在配置 QueryDSL 类的生成。

实体类是用java写的,QDSL文件也应该用java写的。

正常工作的 groovy 构建文件代码 sn-p:

sourceSets {
    generated.java { srcDirs = ['src/main/generated']}
}

task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {
    source = sourceSets.main.java
    classpath = configurations.compile + configurations.querydslapt
    options.compilerArgs = ["-proc:only", "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor"]
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}

compileJava {
    dependsOn generateQueryDSL
    source generateQueryDSL.destinationDir
}

compileGeneratedJava {
    dependsOn generateQueryDSL
    options.warnings = false
    classpath += sourceSets.main.runtimeClasspath
}

这是我在 KotlinDSL 中重写的代码:

val querydsl by configurations.creating

val generated by java.sourceSets.creating {
    java.srcDirs("build/generated/java")
}

tasks {
    val generateQueryDsl by creating(JavaCompile::class.java) {
        group = "build"
        description = "Generate QueryDSL classes"
        classpath = configurations.compile + querydsl
        options.compilerArgs = listOf("-proc:only", "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor")
        destinationDir = generated.java.srcDirs.first()
    }

    getByName<JavaCompile>("compileJava") {
        dependsOn(generateQueryDsl)
        source(generateQueryDsl.destinationDir)
    }

    getByName<JavaCompile>("compileGeneratedJava") {
        dependsOn(generateQueryDsl)
        options.isWarnings = false
        classpath += java.sourceSets["main"].runtimeClasspath
    }
}

当我运行generateQueryDsl 任务时,我得到了 NO-SOURCE 并且没有生成 QDSL 文件:

> Task :common:compileKotlin UP-TO-DATE
> Task :common:generateGrammarSource UP-TO-DATE
> Task :common:compileJava UP-TO-DATE
> Task :common:processResources UP-TO-DATE
> Task :common:classes UP-TO-DATE
> Task :common:inspectClassesForKotlinIC UP-TO-DATE
> Task :common:jar UP-TO-DATE
> Task :common-db:compileKotlin UP-TO-DATE
> Task :common-db:compileJava UP-TO-DATE
> Task :common-db:processResources UP-TO-DATE
> Task :common-db:classes UP-TO-DATE
> Task :common-db:inspectClassesForKotlinIC UP-TO-DATE
> Task :common-db:jar UP-TO-DATE
> Task :core:generateQueryDsl NO-SOURCE

我不确定,但有一种感觉,我可以让这一代人做得更简单,但我的想法已经用完了。

【问题讨论】:

    标签: java gradle querydsl gradle-kotlin-dsl


    【解决方案1】:

    还有另一种生成 QueryDSL Q* 类的方法,可用于最新的 Gradle 版本(我认为 >= 4.9):下面是脚本的 Groovy 版本,您应该尝试从中制作 Kotlin 版本:

    sourceSets {
        generated.java {
            srcDir file('/build/generated/java')
        }
    }
    
    dependencies {
        compile("com.querydsl:querydsl-jpa:${queryDslVersion}")
        compile "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:${hibernateJpaVersion}"
    
        annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jpa"
        annotationProcessor "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:${hibernateJpaVersion}"
    }
    compileJava {
        options.annotationProcessorPath = configurations.annotationProcessor
        options.setAnnotationProcessorGeneratedSourcesDirectory(file("$projectDir/build/generated/java"))
    }
    

    这些 QueryDSL 类将在 Java 编译任务执行期间自动生成(注解处理器),您不再需要定义专门的任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2019-04-06
      • 2021-05-08
      • 2019-03-24
      • 1970-01-01
      相关资源
      最近更新 更多