web-dev-qa-db-ja.com

gradleを使用してswagger.jsonを生成する方法は?

Swagger-codegenを使用してRESTクライアントと、場合によっては静的なHTMLドキュメントを生成します。

ただし、swagger-codegenの入力にはswagger.jsonが必要です。

Swaggerを搭載した実行中のRESTサーバーからこれを取得できることを認識しています。

しかし、my Javaコードからswagger.jsonを直接取得する方法-つまり、ソースコードからgradleで生成する-Webコンテナでアプリケーションを実行する必要なく、 curlまたはそれへのブラウザ?

18
tbsalling

これは少し古いですが、私はまったく同じと思っていました...要するに、私は研究を始めました:

  • ミニマルなREST API;
  • APIメソッドの注釈を入れ替えます。
  • Springfox;
  • ビルドツールとしてのGradle。

2つの異なるアプローチを使用して、JSON仕様をビルドアーティファクトとして生成することができました。

  1. kongchenのswagger-maven-plugingradle port を使用します。
  2. (とにかくサーバーを起動するため、これがカウントされるかどうかはわかりません)仕様を生成する統合テスト(SpringのモックMVC)を実行することにより。 here からアイデアを借りました。

here にある単純なプロジェクトで研究をまとめました。 Automationセクションを参照してください。コードと例が含まれています。

7
Lachezar Balev

主なアイデアは、swagger-maven-pluginと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ライブラリを取得し、2行目はswaggerアノテーションを含む必要があるクラスを取得します。

この後、簡単なJavaクラスとしてgradleで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: '[email protected]',
                                        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()

ここ この例を見つけることができます。