如何在 Gradle 中为 OpenAPI 3.0 使用 Swagger Codegen?

How to use Swagger Codegen in Gradle for OpenAPI 3.0?

我有一个 OpenAPI 3.0 规范(YAML 格式),并想为 API 生成 Java 代码。我想将此作为自动化构建的一部分(最好使用 Gradle),这样我就可以创建服务接口,并将接口的实现作为自动化过程的一部分。

这个工作示例展示了如何做到这一点,但是它使用了 Swagger 2.0 规范 YAML:https://github.com/galovics/swagger-codegen-gradle/tree/first-server-side

我已经分叉了这个例子并添加了一个 OpenAPI 3.0 规范,但是它随后无法构建:https://github.com/robjwilkins/swagger-codegen-gradle/tree/openapi_v3_test

错误是:

failed to read resource listing com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'openapi': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (String)"openapi: 3.0.0

(显示更改的 PR:https://github.com/robjwilkins/swagger-codegen-gradle/pull/1/files

我的理解是需要更新的代码在 build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("io.swagger.codegen.v3:swagger-codegen:3.0.16")
    }
}

可能 io.swagger.codegen.v3:swagger-codegen:3.0.16 不识别 OpenAPI 3.0?

Swagger Core v3 项目似乎专注于从代码(而不是来自规范的代码)生成 YAML/JSON 规范:https://github.com/swagger-api/swagger-core

如果您对此问题有任何帮助,我们将不胜感激。谢谢:)

我现在已经开始工作了(感谢@Helen 的帮助)

所需的编辑在 build.grade 中。

首先,我必须修改构建脚本以引入不同的依赖项:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath('io.swagger.codegen.v3:swagger-codegen-maven-plugin:3.0.16')
    }
}

更改部分导入:

import io.swagger.codegen.v3.CodegenConfigLoader
import io.swagger.codegen.v3.DefaultGenerator
import io.swagger.codegen.v3.ClientOptInput
import io.swagger.codegen.v3.ClientOpts
import io.swagger.v3.parser.OpenAPIV3Parser

并更新生成服务器任务:

ext.apiPackage   = 'com.example.api'
ext.modelPackage = 'com.example.model'

task generateServer {
    doLast {
        def openAPI = new OpenAPIV3Parser().read(rootProject.swaggerFile.toString(), null, null)
        def clientOpts = new ClientOptInput().openAPI(openAPI)
        def codegenConfig = CodegenConfigLoader.forName('spring')
        codegenConfig.setOutputDir(project.buildDir.toString())
        clientOpts.setConfig(codegenConfig)
        def clientOps = new ClientOpts()
        clientOps.setProperties([
                'dateLibrary'     : 'java8', // Date library to use
                'useTags'         : 'true',  // Use tags for the naming
                'interfaceOnly'   : 'true'   // Generating the Controller API interface and the models only
                'apiPackage'       : project.apiPackage,
                'modelPackage'     : project.modelPackage
        ])
        clientOpts.setOpts(clientOps)

        def generator = new DefaultGenerator().opts(clientOpts)
        generator.generate() // Executing the generation
    }
}

更新 build.gradle 在这里:https://github.com/robjwilkins/swagger-codegen-gradle/blob/openapi_v3_test/user-service-contract/build.gradle