Сбой задачи Spring Gradle для queryDsl после OpenApiGenerate - PullRequest
1 голос
/ 20 июня 2020

Проект Spring с использованием Gradle. Я использую OpenApiGenerate в сочетании с QueryDsl (для использования с Spring MongoDB). Чистая сборка gradle иногда терпит неудачу локально и всегда на Gitlab-CI:

Successfully generated code to task ':backend:openApiGenerate' property 'outputDir'
34 errors
> Task :backend:querydsl FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':backend:querydsl'.

QueryDsl не работает, потому что он не может найти источники, созданные OpenApiGenerate:

public class SomethingController implements SomethingApi {
                                           ^

Вот gradle файл сборки:

// QueryDSL
configurations {
    querydslapt.extendsFrom compileClasspath
}
dependencies {
    querydslapt 'com.querydsl:querydsl-apt:4.3.1'
}
task querydsl(type: JavaCompile, group: 'build', description: 'Generate the QueryDSL query types') {
    source = sourceSets.main.java
    classpath = configurations.compile + configurations.querydslapt
    options.annotationProcessorPath = configurations.compile + configurations.querydslapt
    options.compilerArgs = [
            '-proc:only', //only annotations
            '-processor', 'org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor'
    ]
    destinationDir = file("${buildDir}/generated/src/main/java")
}
compileJava.dependsOn querydsl

// OpenAPI
openApiValidate {
    inputSpec = "${rootDir}/openapi/specifications/schema.yaml".toString()
}
openApiGenerate {
    generatorName = "spring"
    library = "spring-boot"
    inputSpec = "${rootDir}/openapi/specifications/schema.yaml".toString()
    outputDir = "${buildDir}/generated".toString()
    systemProperties = [
            modelDocs      : "false",
            models         : "",
            apis           : "",
            supportingFiles: "false"
    ]
    configOptions = [
            useOptional          : "true",
            swaggerDocketConfig  : "false",
            performBeanValidation: "false",
            useBeanValidation    : "false",
            useTags              : "true",
            singleContentTypes   : "true",
            basePackage          : "...api",
            configPackage        : "...api",
            title                : rootProject.name,
            java8                : "false",
            dateLibrary          : "java8",
            serializableModel    : "true",
            artifactId           : rootProject.name,
            apiPackage           : "...api",
            modelPackage         : "...model",
            invokerPackage       : "...api",
            interfaceOnly        : "true"
    ]
}
compileJava.dependsOn 'openApiGenerate'

Дальнейшие изменения, которые не помогли:

Удалено

compileJava.dependsOn 'openApiGenerate'
compileJava.dependsOn querydsl

и добавлено

compileJava.dependsOn querydsl
querydsl.mustRunAfter 'openApiGenerate'

Есть ли у кого-нибудь идея? в частности, почему это иногда работает локально, а иногда нет?

Ответы [ 2 ]

0 голосов
/ 30 июня 2020

Что помогло, так это изменение destinationDir querydsl на что-то другое:

destinationDir = file("${buildDir}/generated/src/main/java")

на

destinationDir = file("${buildDir}/generated/src/main/java/querydsl")

=> Похоже, что openApiGenerate принудительно установил состояние блокировки для начального destinationDir поскольку он использовался обеими задачами.

0 голосов
/ 20 июня 2020

Добавлен ли каким-либо образом выходной каталог задачи openApiGenerate в каталог sr c? Если нет, у вас должно быть

sourceSets{
main{
java{
dir openApiGenerate.outputDir
}} 
} 
...