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 文件的主要内容,如果未能解决你的问题,请参考以下文章