java - 如何在 Gradle for OpenAPI 3.0 中使用 Swagger Codegen?

标签 java gradle swagger openapi swagger-codegen

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

此工作示例展示了如何执行此操作,但它使用 Swagger 2.0 规范 YAML:https://github.com/galovics/swagger-codegen-gradle/tree/first-server-side

我已经 fork 了这个示例并添加了 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

(公关显示更改: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

并更新generateServer任务:

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

关于java - 如何在 Gradle for OpenAPI 3.0 中使用 Swagger Codegen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875910/

相关文章:

gradle - 无法将 'String' 分配给 'T'

asp.net-web-api - 是否可以在 Asp Web Api 的单独项目中创建 Swagger 文档?

Swagger UI 添加 curl 自定义参数

java - 具有两种颜色的自定义文本样式

java - 字符数错误(文件中的字符串操作)--Java

android - Gradle 有错误,但构建良好

java - 来自注释的 Swagger 示例帖子正文

java - 重复的 Java 运行时选项 : what is the order of preference?

java - 了解gwt中水平面板中小部件的类型

android - 如何在 Android Studio 中设置 JNI 子目录