Ссылка на внешний файл (спецификация openapi) из плагина gradle (генератор openapitools)

Я пытаюсь создать приложение, которое ссылается на спецификацию openapi, которая уже опубликована в artifactory. Это означает, что я буду использовать foo.yaml в качестве зависимости, но я не могу понять, как на самом деле ссылаться на этот файл с помощью плагина генератора openapitools.

Учитывая, что спецификации openapi могут использоваться для генерации как серверного, так и клиентского кода, вполне логично, что он публикуется отдельно и просто извлекается и на него ссылаются реализации.

com.company.bar-1.0.10 содержит foo.yaml на верхнем уровне jar.

Я добавил зависимость на верхнем уровне файла build.gradle.kts, а также добавил ее как часть самой задачи плагина.

задача generateFooCode (тип: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {

generatorName = "java"
apiPackage = 'com.ehi.gbo.openapiconnect.api.foo'
modelPackage = 'com.ehi.gbo.openapiconnect.model.foo'
invokerPackage = 'com.ehi.gbo.openapiconnect.common.invoker'
inputSpec = "foo.yaml".toString()
outputDir = "$buildDir/generated-sources/foo".toString()
configOptions = [
        dateLibrary          : "java8",
        useTags              : true,
        interfaceOnly        : true,
        delegatePattern      : false,
        useBeanValidation    : false,
        performBeanValidation: false,
        useOptional          : false,
        serviceImplementation: false,
        serviceInterface     : false,
        java8                : false,
        serializableModel    : true,
        skipDefaultInterface : true,
        reactive             : false,
]
configurations {
    dependencies {
        implementation 'com.company.bar:foo-api:1.0.10'
    }
}

}

Результаты, которые я получаю: * Что пошло не так: Выполнение задачи ': generateFooCode' завершилось неудачно.

Были проблемы со спецификацией. Опцию можно отключить с помощью validateSpec (Maven / Gradle) или --skip-validate-spec (CLI). | Количество ошибок: 1, количество предупреждений: 0 Ошибки: -не удается прочитать местоположение foo.yaml


person stupot    schedule 25.10.2019    source источник


Ответы (1)


После долгих поисков я нашел очень элегантное решение.

configurations {
    api
}
  dependencies {
    api 'somegroup:someArtifact:someVersion'
}
  task extractApi(type: Sync) {
    dependsOn configurations.api

    from { // use of closure defers evaluation until execution time
        configurations.api.collect { zipTree(it) }
    }
    into "$buildDir/api/"
}

Тогда я мог бы просто сделать ссылку inputSpec $ buildDir / api / spec.yaml

person stupot    schedule 29.10.2019
comment
Это отлично! Отметить; вероятно, лучше использовать openapi или schema для конфигурации вместо api - поскольку api используется плагином java-библиотеки для обозначения транзитивных зависимостей. - person briceburg; 18.06.2020