如何让OpenAPI生成的Java客户端复用自定义模型库并自动添加依赖?
问题:OpenAPI生成Java客户端时自动添加外部模型库依赖到POM
场景与问题
我维护一个分为两个子模块的Java用户服务微服务:
- API模块:基于SpringBoot,对外暴露接口控制器
- 模型库模块:包含User、Company等所有实体模型类的Jar包,作为依赖供其他消费微服务使用
最初我用以下命令生成调用该服务的Java客户端:
openapi-generator generate -i openapi.yaml \ -o ./generated_client/ \ -g java \ --additional-properties=library=webclient
但生成的客户端包含一套全新的模型类,不符合复用已有模型库的需求。于是我通过--import-mappings参数指定模型类的导入路径:
openapi-generator generate -i openapi.yaml \ -o ./generated_client/ \ -g java \ --import-mappings User=com.mypackage.userservice.model.entity.user.User \ --additional-properties=library=webclient
此时生成的代码已能正确导入自定义的User类,但生成的POM文件缺少模型库的依赖配置,我希望无需手动修改POM,让OpenAPI生成器自动添加该依赖。
尝试过的无效方案
我曾尝试通过设置父POM来解决依赖问题,但模型库的打包类型是Jar,无法作为父POM使用,对应的命令如下:
openapi-generator generate -i openapi.yaml \ -o ./generated_client/ \ -g java \ --import-mappings=User=com.package.userservice.model.entity.user.User \ --additional-properties=library=webclient,groupId=com.package,parentArtifactId=user-service-pom,parentGroupId=com.package,parentVersion=1.87.182
解决方案
可以通过OpenAPI Generator的extraDependencies参数(属于--additional-properties的子参数),直接在生成命令中指定需要添加的外部依赖,生成器会自动将其写入POM文件的<dependencies>节点。
方法1:命令行直接指定
将模型库的依赖信息以JSON数组格式传入extraDependencies:
openapi-generator generate -i openapi.yaml \ -o ./generated_client/ \ -g java \ --import-mappings User=com.mypackage.userservice.model.entity.user.User,Company=com.mypackage.userservice.model.entity.company.Company \ --additional-properties=library=webclient,extraDependencies=[{"groupId":"com.mypackage","artifactId":"user-model-library","version":"1.0.0"}]
注:如果需要映射多个模型类,在
--import-mappings中用逗号分隔即可。
方法2:通过配置文件管理(推荐,避免命令行过长)
创建一个config.json配置文件,写入客户端生成的参数和依赖信息:
{ "library": "webclient", "importMappings": { "User": "com.mypackage.userservice.model.entity.user.User", "Company": "com.mypackage.userservice.model.entity.company.Company" }, "extraDependencies": [ { "groupId": "com.mypackage", "artifactId": "user-model-library", "version": "1.0.0" } ] }
然后使用--config参数加载配置文件生成客户端:
openapi-generator generate -i openapi.yaml \ -o ./generated_client/ \ -g java \ --config config.json
两种方法生成的POM文件都会自动包含模型库的依赖项,无需手动修改。
内容的提问来源于stack exchange,提问作者CptWasp
相关产品推荐
相关产品推荐

