如何在Gradle中用OpenAPI Generator生成多Base Path的ApiClient
解决OpenAPI Generator生成多客户端时ApiClient覆盖问题
你的问题核心是两个生成任务共用了同一个输出目录,且默认包名一致,导致后生成的客户端覆盖了前一个的ApiClient类,进而丢失了第一个客户端的base path。解决方法是给每个客户端配置独立的输出目录和专属的包名,让两个客户端的代码完全隔离。
具体修改步骤
1. 调整Gradle任务配置
给每个生成任务指定单独的outputDir和packageName(在configOptions中添加):
tasks.register('generateFirstClient', GenerateTask) { generatorName.set("java") inputSpec.set("$rootDir/src/main/resources/static/openapi/client-api-docs.yaml") // 第一个客户端独立输出目录 outputDir.set("$rootDir/build/generated-sources/first-client") templateDir.set("$rootDir/src/main/resources/static/openapi/templates") configOptions.set([ library: "webclient", dateLibrary: "java8", useTags: "true", openapiNullable: "false", generateModelDocumentation: "true", generateModelTests: "true", generateApiDocumentation: "true", generateApiTests: "true", useSpringBoot3: "true", useLombok: "true", generateBuilders: "true", // 第一个客户端专属包名 packageName: "com.example.firstclient" ]) } tasks.register('generateSecondClient', GenerateTask) { generatorName.set("java") inputSpec.set("$rootDir/src/main/resources/static/openapi/test-client-api-docs.yaml") // 第二个客户端独立输出目录 outputDir.set("$rootDir/build/generated-sources/second-client") templateDir.set("$rootDir/src/main/resources/static/openapi/templates") configOptions.set([ library: "webclient", dateLibrary: "java8", openapiNullable: "false", generateModelDocumentation: "true", generateModelTests: "true", generateApiDocumentation: "true", generateApiTests: "true", useSpringBoot3: "true", useLombok: "true", generateBuilders: "true", // 第二个客户端专属包名 packageName: "com.example.secondclient" ]) }
2. 原理说明
- 独立输出目录:避免两个任务的生成文件互相覆盖;
- 专属包名:让每个客户端的
ApiClient类处于不同的Java包下,成为完全独立的类,各自持有对应spec中配置的server.url作为base path。
验证效果
运行两个生成任务后,你会在build/generated-sources下看到first-client和second-client两个目录,分别对应两个客户端的代码。每个目录下的ApiClient类会使用各自spec文件中定义的base path,FirstClientApi和SecondClientApi也会分别依赖对应包下的ApiClient,从而实现各自调用对应服务。
内容的提问来源于stack exchange,提问作者Max Rojas
相关产品推荐
相关产品推荐

