如何在build.gradle.kts中为多OpenAPI接口生成客户端存根?
多OpenAPI YAML文件生成客户端存根的实现方案
直接编写多个openApiGenerate块无法生效,因为这是插件提供的默认单例任务,只能存在一个实例。正确的做法是创建多个自定义任务,每个任务对应一个YAML文件,任务类型指定为OpenAPI插件的GenerateTask。
实现步骤与代码示例
1. 抽离公共配置
将两个接口生成任务的通用配置(如生成器类型、库选项、关闭测试/文档生成等)抽成函数,避免重复代码:
import org.openapitools.generator.gradle.plugin.tasks.GenerateTask // 公共配置函数:统一设置通用生成参数 fun configureCommonOpenApiSettings(task: GenerateTask) { task.generatorName.set("kotlin") task.library.set("multiplatform") task.configOptions.set(mapOf("dateLibrary" to "java8")) // 关闭测试代码与文档生成 task.generateModelTests.set(false) task.generateApiTests.set(false) task.generateModelDocumentation.set(false) task.generateApiDocumentation.set(false) // 全局属性:仅生成模型代码 task.globalProperties.set(mapOf("models" to "")) }
2. 创建自定义生成任务
为每个YAML文件注册独立的生成任务,分别配置差异化参数(如输入文件、包名等):
// 生成interface1的客户端存根 tasks.register<GenerateTask>("openApiGenerateInterface1") { configureCommonOpenApiSettings(this) inputSpec.set("$rootDir/sharedSDK/openApi/interface1.yaml") outputDir.set("$rootDir/sharedSDK/") modelPackage.set("package.interface1.model") modelNamePrefix.set("V2") } // 生成interface2的客户端存根 tasks.register<GenerateTask>("openApiGenerateInterface2") { configureCommonOpenApiSettings(this) inputSpec.set("$rootDir/sharedSDK/openApi/interface2.yaml") outputDir.set("$rootDir/sharedSDK/") // 注意:为避免类冲突,包名需与interface1区分 modelPackage.set("package.interface2.model") // 可根据需求设置不同的模型前缀,或复用V2 modelNamePrefix.set("V2") }
3. 可选:保留原命令兼容性
如果希望继续使用原gradlew openApiGenerate命令执行第一个接口的生成,可让默认任务依赖自定义任务:
tasks.named("openApiGenerate") { dependsOn("openApiGenerateInterface1") }
执行命令
- 生成interface1:
gradlew openApiGenerateInterface1(或原命令gradlew openApiGenerate,如果配置了依赖) - 生成interface2:
gradlew openApiGenerateInterface2 - 同时生成两个接口:
gradlew openApiGenerateInterface1 openApiGenerateInterface2
内容的提问来源于stack exchange,提问作者Gugelhupf
相关产品推荐
相关产品推荐

