Swagger-codegenを使用してRESTクライアントと、場合によっては静的なHTMLドキュメントを生成します。
ただし、swagger-codegenの入力にはswagger.jsonが必要です。
Swaggerを搭載した実行中のRESTサーバーからこれを取得できることを認識しています。
しかし、my Javaコードからswagger.jsonを直接取得する方法-つまり、ソースコードからgradleで生成する-Webコンテナでアプリケーションを実行する必要なく、 curl
またはそれへのブラウザ?
これは少し古いですが、私はまったく同じと思っていました...要するに、私は研究を始めました:
2つの異なるアプローチを使用して、JSON仕様をビルドアーティファクトとして生成することができました。
here にある単純なプロジェクトで研究をまとめました。 Automation
セクションを参照してください。コードと例が含まれています。
主なアイデアは、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()
ここ この例を見つけることができます。