OpenAPI Generator默认Host修改:生成Java类时变更Host遇阻
解决openapi-generator-maven-plugin 3.3.4修改Swagger Host不生效的问题
针对3.3.4这个老版本,直接配置host参数可能因版本特性不生效,给你几个可行的解决办法:
方案1:用全局参数指定Host
3.3.4版本支持通过globalProperties传递Host参数,注意参数名可能是host或者openapi.host,试试下面的配置:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>3.3.4</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec> <generatorName>java</generatorName> <!-- 其他必要配置 --> <globalProperties> <!-- 先试这个参数名 --> <globalProperty>host=your.target.host.com</globalProperty> <!-- 如果上面的不生效,换成这个 --> <!-- <globalProperty>openapi.host=your.target.host.com</globalProperty> --> </globalProperties> </configuration> </execution> </executions> </plugin>
方案2:生成前修改Swagger文件
如果插件参数不好使,直接在生成代码前用maven-replacer-plugin替换Swagger文件里的Host值,把这个插件放在openapi-generator插件前面执行:
<plugin> <groupId>com.google.code.maven-replacer-plugin</groupId> <artifactId>replacer</artifactId> <version>1.5.3</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>replace</goal> </goals> <configuration> <file>${project.basedir}/src/main/resources/swagger.yaml</file> <replacements> <replacement> <token>host: api.default.host</token> <value>host: your.target.host.com</value> </replacement> </replacements> </configuration> </execution> </executions> </plugin>
方案3:自定义代码模板
3.3.4的Java生成器依赖模板渲染代码,你可以复制官方的Java模板,修改Host部分后指定自定义模板目录:
- 找到openapi-generator依赖里的Java模板(比如
ApiClient.mustache),复制到项目的src/main/resources/templates/java目录下 - 打开模板文件,找到硬编码Host的地方,替换成你的目标Host
- 在插件配置里指定模板目录:
<configuration> <!-- 其他配置 --> <templateDirectory>${project.basedir}/src/main/resources/templates/java</templateDirectory> </configuration>
方案4:生成后替换代码(兜底方案)
如果上面的方法都不行,用maven-antrun-plugin在代码生成后直接替换生成类里的Host值:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <replace file="${project.build.directory}/generated-sources/openapi/src/main/java/com/your/package/ApiClient.java"> <replacetoken>api.default.host</replacetoken> <replacevalue>your.target.host.com</replacevalue> </replace> </tasks> </configuration> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者Vicardo
相关产品推荐
相关产品推荐

