Swagger Gradle 插件在构建期间没有为 spring mvc 正确生成 openapi.json 文件

Posted

技术标签:

【中文标题】Swagger Gradle 插件在构建期间没有为 spring mvc 正确生成 openapi.json 文件【英文标题】:Swagger Gradle Plugin not properly generating openapi.json file for spring mvc during build 【发布时间】:2019-03-23 17:40:07 【问题描述】:

我想导入使用 swagger gradle 插件创建的 API 定义文件。我有一个 spring boot mvc 应用程序。我似乎无法正确解析设置以生成 openAPI.json。 gradle resolve 任务创建一个空文件,其中只有 "openapi" : "3.0.1" 标记和值。解决任务没有选择 swagger 和 mvc api 注释。你能指出我正确的方向来为 swagger gradle resolve 任务找到正确的配置设置吗?

当应用程序运行并且我查看 swagger-ui 端点时,应用程序显示 Spring-UI 文档没有问题。问题是在 gradle 构建期间有一个单独的 gradle 任务来生成我想作为应用程序 API 目录的一部分导入 SwaggerHub 的 openAPI.json 文件。

我无法在任何地方找到有关如何配置 swagger gradle 插件解析任务以获取 Spring MVC API 注释的任何文档。我可以让它在另一个使用 jax-rs 注释的应用程序上正常工作,所以我确定这是一个解决任务配置问题。

我的 gradle.build 文件的副本:

buildscript 
    ext 
        springBootVersion = '1.4.1.RELEASE'
    
    repositories 
        mavenCentral()
        maven 
          url "https://plugins.gradle.org/m2/"
        
    
    dependencies 
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
        classpath("io.spring.gradle:dependency-management-plugin:0.5.6.RELEASE")

        // SwaggerHub Plugin Dependency
        classpath("gradle.plugin.io.swagger:swaggerhub:1.0.1")

        // Swagger Gradle Plugin Dependency
        classpath("io.swagger.core.v3:swagger-gradle-plugin:2.0.5") 

    


apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'jacoco'
// Required to upload swagger api doc to swaggerhub
apply plugin: 'io.swagger.swaggerhub'
// Required to generate swagger api doc file to upload to swaggerhub
apply plugin: 'io.swagger.core.v3.swagger-gradle-plugin'


jar 
    baseName = 'service-framework'
    version = '0.0.1-SNAPSHOT'


javadoc 
    source = sourceSets.main.allJava


sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories 
    mavenCentral()



dependencies 
    compile('org.springframework.boot:spring-boot-starter-aop')
    compile('org.springframework.boot:spring-boot-starter-jersey')
    compile('org.springframework.boot:spring-boot-starter-web')

    // Swagger Dependencies to generate the api documentation
    compile('io.swagger:swagger-annotations:1.5.20')
    compile('io.springfox:springfox-swagger2:2.8.0')
    compile('io.springfox:springfox-swagger-ui:2.8.0')

    runtime('com.h2database:h2')
    runtime('org.postgresql:postgresql')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
    testCompile group: 'junit', name: 'junit-dep', version: '4.10'
    testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'


// Command to the swagger gradle plugin to generate the api file for upload
// to swaggerhub
//
//
// Create the directory for output of the api document
File path = new File("$buildDir/doc")
//
// The Swagger Core Task to create the json output file required to upload
// to SwaggerHub
//
resolve 
    outputFileName = 'openAPI'
    outputFormat = 'JSON'
    prettyPrint = 'TRUE'
    classpath = sourceSets.main.runtimeClasspath
    resourcePackages = ['test.serviceframework']
    outputPath = path.getAbsolutePath();

openAPI.json 文件中的结果输出:


  "openapi" : "3.0.1"

【问题讨论】:

我们有同样的问题,仍在寻找解决方案... 【参考方案1】:

似乎还没有针对 Spring(MVC/Rest)和 OpenAPI 3 的自动文档工具。

SpringFox 为 Swagger 2 执行此操作。看起来您已添加此内容,因此您应该在 /v2/api-docs 中查看您的 Swagger 2 文档

io.swagger.core 为 JAX-RS 和 Jersey 提供 OpenAPI 3

此时的选项是:

生成 Swagger 2,并将其转换为 OpenAPI 3 在 Spring 中运行 JAX-RS

【讨论】:

【参考方案2】:

我知道这是一个老问题,但是自从原始帖子以来,Swagger gradle 插件并没有解决这个问题。但是,Spring Doc 有。

https://github.com/springdoc/springdoc-openapi-gradle-plugin

【讨论】:

以上是关于Swagger Gradle 插件在构建期间没有为 spring mvc 正确生成 openapi.json 文件的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle插件开发基础

Android Gradle插件开发基础

Android Gradle插件开发基础

Android Gradle 插件 0.7.0:“打包 APK 期间重复文件”

Gradle 插件

使用Gradle但不使用Java插件构建Java项目