maven-3 - 从 yaml 生成代码 - 比 Swagger codegen 更可靠?
问题描述
(示例)问题:
当 yaml 源包含冲突的定义时,例如myClass
,MyClass
两者都生成到 java 类MyClass
中,其中一个覆盖另一个,则不会发生警告或错误。其他类似的情况也可能以相同的方式发生(例如,通过从 的复杂条目隐式生成的类type: array
)。
框架
- 必须在不修改源文件的情况下工作
- 只有一个源文件,不管它值多少钱
- 必须作为 Maven 插件工作
- 用
swagger-codegen-maven-plugin
2.4.0 和 2.4.22 测试
- 用
- 熟悉 JAXB2 及其两个常见的 Maven 插件:
jaxb2-maven-plugin
maven-jaxb2-plugin
- 不熟悉
swagger-codegen-maven-plugin
- 没有使用谷歌搜索找到解决方案(甚至相应的问题报告)
swagger codegen strict
swagger-codegen-maven-plugin strict
swagger codegen name collision
swagger-codegen-maven-plugin name collision
swagger codegen resolve name collision
swagger-codegen-maven-plugin resolve name collision
- 发现这个已关闭的问题描述了一个类似的问题(默默地生成损坏的代码),这似乎大部分是不相关的,并且据称已长期修复
问题
产生的正确解决方案是什么
- 急切失败的生成过程
- 通过外部配置修改
customBindings
- 不接触
yaml
源文件
?
解决思路:
改用 JAXB2
JAXB2
- 在生成的文件已存在的情况下生成失败
- 允许单独的
customBindings.xjs
文件修改类的生成 - 可以适应使用 YAML
JacksonJaxbYAMLProvider
jaxb2-maven-plugin
然而,常见的 Maven 插件似乎maven-jaxb2-plugin
并不支持 YAMl 定义文件(开箱即用?)。[1]
使用 Mustache 文件解决名称冲突
Mustache语言似乎为实现类似于 JAXB 的规则提供了必要的工具xjb
。
然而
- 必须通过名称( )将 Mustache 模板绑定到类
<class name>.mustache
,也就是。特别是名称冲突无法从外部文件中解决 [2] - 这无助于生成代码中的错误沉默——一个人无法修复错误,却不知道它
1 - 对该主题的搜索产生了一个结果,即它不能开箱即用(duh),并且没有结果是否可以使用extensions
两个插件支持的接口使其工作。
2 - 我无法直接在 Swagger 代码生成文档中找到相关部分,但这里是由 Swagger 实现的 OpenAPI 生成器文档的相关部分。
解决方案
推荐阅读
- back-testing - zipline 自定义捆绑回测
- docker - 运行 go get 时 Docker 构建失败
- java - 当我测试另一个类时,Mockito 无法模拟第三类的属性
- java - 任何具有大小限制的内置 scala 缓存功能
- bash - 使用 bash 通过将文件名减 1 来重命名目录中的所有文件
- bazel - 如何从 bazel 以前的运行中查找日志
- reactjs - 如何在 React/Typescript 中使用用户点击事件实现类似堆栈的动画
- mysql - Arduino - GET 请求和数据发布到 mySQL
- excel - 只有在另一个工作表中找不到匹配项时,VBA才会复制一系列单元格
- server - 我应该如何设计一个投票式的投票系统?