Java QueryDSL и Gradle Kotlin DSL - PullRequest
       30

Java QueryDSL и Gradle Kotlin DSL

0 голосов
/ 17 октября 2018

Мы переносим наши файлы сборки Groovy Gradle в KotlinDSL, и я застрял с настройкой генерации классов QueryDSL.

Классы сущностей написаны на Java, а файлы QDSL должны быть и на Java.

Фрагмент кода рабочего файла сборки groovy:

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

Я не уверен, но у меня есть ощущение, что я мог бы сделать это поколение намного проще, но у меня закончились идеи.

1 Ответ

0 голосов
/ 17 октября 2018

Существует еще один способ создания классов 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 (процессор аннотаций), вам больше не нужно определять выделенную задачу.

...