Проект 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'
Есть ли у кого-нибудь идея? в частности, почему это иногда работает локально, а иногда нет?