Генератор OpenAPI работает из командной строки, но не из плагина Gradle

#gradle #openapi #openapi-generator #openapi-generator-gradle-plugin

Вопрос:

Я хочу сгенерировать заглушки клиентов для моего приложения Flutter/Dart для внутреннего API, написанного в OpenAPI 3. Сам сервер был создан с использованием той же спецификации API, что и плагин Maven org.openapitools.openapi-generator-maven-plugin .

Когда я пытаюсь сгенерировать заглушки клиента Dart таким образом с помощью командной строки, это работает нормально:

 java -cp openapi-generator-cli-5.1.1.jar org.openapitools.codegen.OpenAPIGenerator generate -i ./api_spec/api.json -g dart --enable-post-process-file
 

Но я хочу поместить его в сборку gradle как часть приложения Flutter, поэтому я последовал инструкциям и создал этот build.gradle файл:

 buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
}

plugins {
    id "org.openapi.generator" version "5.1.1"
}

openApiGenerate {
    generatorName = "dart"
    inputSpec = "$rootDir/api_spec/api.json"
    outputDir = "$rootDir/../api"
    apiPackage = "mypackage.api"
    modelPackage = "mypackage.api"
}
 

Однако это не приводит к созданию клиентских заглушек. (Я даже попытался сменить язык, чтобы понять, в чем проблема, и эффект тот же). Я получаю кучу ошибок, подобных следующим, которые, по-видимому, указывают на то, что по какой-то причине ожидается файл Swagger 2.0 вместо файла OpenAPI 3.x.

 > Task :openApiGenerate FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':openApiGenerate'.
> There were issues with the specification. The option can be disabled via validateSpec (Maven/Gradle) or --skip-validate-spec (CLI).
   | Error count: 72, Warning count: 0
  Errors:
        -attribute paths.'/subscriber/{id}/device'(post).[id].type is missing
        -attribute openapi is unexpected
        -attribute servers is unexpected
        -attribute swagger is missing
        -attribute components is unexpected
 

Есть ли какой-нибудь способ исправить это или явно указать версию OpenAPI?

Я даже попытался установить validateSpec = false , но это не имеет никакого значения, флаг игнорируется, и я все равно получаю тот же результат.

Комментарии:

1. Не могли бы вы опубликовать отредактированную версию своего файла API JSON? Это было бы полезно для воспроизведения проблемы. Спасибо!