我正在尝试使swagger code-gen
在使用gradle(kotlin)构建的项目中工作。
我的参考示例是这里的https://github.com/int128/gradle-swagger-generator-plugin,它是Gradle groovy版本制作的。
build.gradle.kts
如下:
repositories {
jcenter()
}
plugins {
java
id("org.springframework.boot") version "2.1.2.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
id("org.hidetake.swagger.generator") version "2.16.0"
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation ("io.swagger:swagger-annotations:1.5.21")
swaggerCodeGen("io.swagger:swagger-codegen-cli:2.3.1")
// Use JUnit test framework
testImplementation ("junit:junit:4.12")
}
swaggerSources {
petstore {
inputFile = file('petstore.yaml')
code {
language = 'spring'
}
}
}
我是gradle的新手,所以我不知道该怎么办。 swaggerCodeGen应该是一个函数吗?此功能应该导入哪里? swaggerSources
应该导入哪里?
答案 0 :(得分:2)
import org.hidetake.gradle.swagger.generator.GenerateSwaggerCode
// plugins, repositories are same, but note import above ^^^
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation ("io.swagger:swagger-annotations:1.5.21")
"swaggerCodegen"("io.swagger:swagger-codegen-cli:2.3.1") // 1
// Use JUnit test framework
testImplementation ("junit:junit:4.12")
}
swaggerSources {
create("petstore").apply { // 2
setInputFile(file("petstore.yaml")) // 3
code(closureOf<GenerateSwaggerCode> { // 4
language = "spring"
})
}
}
1-Kotlin中动态解析的配置看起来像这样(从Groovy动态地获取,因此在编译时使用它是有问题的,String上的扩展invoke运算符是我们的救星);
2-{{1}}返回swaggerSources
,因此要添加新容器,我们将其名称作为参数调用NamedDomainObjectContainer<SwaggerSource>
;
3-Kotlin不像Groovy那样灵活,因此调用setter而不是设置字段;
4-Groovy的闭包距离功能接口很远,因此我们将泛型类型指定为插件的源create
中未设置参数。
答案 1 :(得分:0)
您也可以使用此 openapi-generator 插件任务来生成 swagger 代码。
它与 swagger codegen 插件做同样的事情。在您的 build.gradle.kts
中使用它,例如:
plugins {
id("org.openapi.generator") version "5.1.1"
}
openApiGenerate {
generatorName.set("spring")
inputSpec.set("$rootDir/src/main/resources/petstore.yaml")
outputDir.set("$buildDir/generated/")
}
dependencies {
//Spring boot dependency
implementation("org.springframework.boot:spring-boot-starter-web")
// For swagger generated code and annotations
implementation("io.springfox:springfox-boot-starter:3.0.0")
implementation("javax.validation:validation-api:2.0.0.Final")
}
这可以与 kotlin
或 java
项目一起使用,然后您需要通过执行以下操作将生成的类添加到您的 sourceSet:
configure<SourceSetContainer> {
named("main") {
java.srcDir("$buildDir/generated/src/main/java")
}
}
最后一步是确保在编译前生成 swagger 文件,对于 Kotlin,在编译任务中添加:
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
dependsOn("openApiGenerate")
kotlinOptions.jvmTarget = "11"
}
您可以检查生成器的 properties 以调整生成文件的配置。