Java 如何使用gradle生成swagger.json?

Java 如何使用gradle生成swagger.json?,java,swagger,swagger-codegen,Java,Swagger,Swagger Codegen,我想使用swagger codegen生成REST客户机和可能的静态HTML文档 但是,swagger codegen需要swagger.json作为输入 我知道,我可以从一个装备了Swagger的正在运行的REST服务器上得到这个 但是有没有一种方法可以直接从我的Java代码中获取swagger.json,即使用gradle从源代码生成它,而无需在web容器中运行应用程序,然后将curl或浏览器指向它?主要思想是将swagger maven插件和java类添加到类路径中,以便buildScri

我想使用swagger codegen生成REST客户机和可能的静态HTML文档

但是,swagger codegen需要swagger.json作为输入

我知道,我可以从一个装备了Swagger的正在运行的REST服务器上得到这个


但是有没有一种方法可以直接从我的Java代码中获取swagger.json,即使用gradle从源代码生成它,而无需在web容器中运行应用程序,然后将
curl
或浏览器指向它?

主要思想是将swagger maven插件和java类添加到类路径中,以便buildScript能够在gradle中使用它们,如下所示:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath files(project(':swagger-maven-example').configurations['runtime'].files)
        classpath files(project(':swagger-maven-example').sourceSets['main'].output.classesDir)
    }
}
其中,依赖项中的第一行从子项目获取swagger libs,第二行获取应该包含swagger注释的类

在此之后,您可以在gradle中作为一个简单的java类调用maven插件:

// a trick to have all needed classes in the classpath
def customClass = new GroovyClassLoader()

buildscript.configurations.classpath.each {
    // println it.toURI().toURL()
    customClass.addURL(it.toURI().toURL())
}

final ApiDocumentMojo mavenTask = Class.forName('com.github.kongchen.swagger.docgen.mavenplugin.ApiDocumentMojo',true, customClass).newInstance(
        apiSources: [
                new ApiSource(
                        springmvc: false,
                        locations: ['com/github/kongchen/swagger/sample/wordnik/resource'],
                        schemes: ['http', 'https'],
                        host: 'petstore.swagger.wordnik.com',
                        basePath: '/api',
                        info: new Info(
                                title: 'Swagger Maven Plugin Sample',
                                version: 'v1',
                                description: 'This is a sample for swagger-maven-plugin',
                                termsOfService: 'http://www.github.com/kongchen/swagger-maven-plugin',
                                contact: new Contact(
                                        email: 'kongchen@gmail.com',
                                        name: 'Kong Chen',
                                        url: 'http://kongch.com'
                                ),
                                license: new License(
                                        url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
                                        name: 'Apache 2.0'
                                )
                        ),
                        outputPath: file("${buildDir}/swagger/document.html").path,
                        swaggerDirectory: file("${buildDir}/swagger/swagger-ui").path,
                        templatePath: file("${project(':swagger-maven-example').projectDir}/templates/strapdown.html.hbs")
                )
        ]
)

// maven plugin
mavenTask.execute()

你可以找到这个例子。

这有点老了,但我想知道完全一样。。。简言之,我从以下方面开始研究:

  • 一个示例SpringBoot应用程序,公开了简约的RESTAPI
  • API方法上的夸张注释
  • 斯普林福克斯
  • Gradle作为构建工具
我使用两种不同的方法将JSON规范作为构建工件生成:

  • 通过使用
  • (不确定这是否算数,因为它无论如何都会启动服务器)执行生成规范的集成测试(Spring的模拟MVC)。我借用了他的想法

  • 我在一个简单的项目中总结了我的研究。请参阅
    自动化
    部分。包含代码和示例。

    我仍在研究它。你试过这个插件吗?在使用swagger-gradle插件时,我遇到了以下错误:com.fasterxml.jackson.databind.JsonMappingException:由于[Source:UNKNOWN;line:1,column:0]的输入结束,没有要映射的内容在当前的spring引导版本中被破坏。被告知