【问题标题】:How to generate client code using with swagger-codegen-plugin (maven)?如何使用 swagger-codegen-plugin (maven) 生成客户端代码?
【发布时间】:2018-08-29 06:53:07
【问题描述】:

我需要使用 swagger-codegen-plugin (for maven) 在 Eclipse 中生成服务器存根代码。你能帮忙怎么做吗?以及需要什么配置(在 pom.xml 中)。

【问题讨论】:

  • 标题说生成客户端代码,正文说服务器代码,你真的想要哪个?

标签: java maven swagger swagger-codegen


【解决方案1】:

我找到了这个答案。您只需要像下面这样更改 pom.xml。

pom.xml.

<properties>
           <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
           <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
           <java.version>1.8</java.version>
           <version.swagger.codegen>2.2.1</version.swagger.codegen>
           <yaml.file>${project.basedir}/src/main/resources/Api.yaml</yaml.file>
           <generated-sources-path>${project.build.directory}/generated-sources</generated-sources-path>
           <generated-sources-java-path>main/java</generated-sources-java-path>
       </properties>

<build>
           <plugins>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
               </plugin>
               <plugin>
                   <groupId>io.swagger</groupId>
                   <artifactId>swagger-codegen-maven-plugin</artifactId>
                   <version>${version.swagger.codegen}</version>
                   <configuration>
                       <inputSpec>${yaml.file}</inputSpec>
                       <configOptions>
                           <sourceFolder>${generated-sources-java-path}</sourceFolder>
                       </configOptions>
                       <output>${generated-sources-path}</output>
                   </configuration>
                   <executions>
                       <execution>
                           <id>generate-swagger-spring</id>
                           <phase>generate-sources</phase>
                           <goals>
                               <goal>generate</goal>
                           </goals>
                           <configuration>
                               <language>spring</language>
                               <modelPackage>${project.groupId}.swagger.model</modelPackage>
                               <apiPackage>${project.groupId}.swagger.api</apiPackage>
                               <invokerPackage>${project.groupId}.swagger.invoker</invokerPackage>
                           </configuration>
                       </execution>
                   </executions>
               </plugin>        
               <plugin>
                   <groupId>org.codehaus.mojo</groupId>
                   <artifactId>build-helper-maven-plugin</artifactId>
                   <executions>
                       <execution>
                           <id>add-generated-source</id>
                           <phase>initialize</phase>
                           <goals>
                               <goal>add-source</goal>
                           </goals>
                           <configuration>
                               <sources>
                                   <source>${generated-sources-path}/${generated-sources-java-path}</source>
                               </sources>
                           </configuration>
                       </execution>
                   </executions>
               </plugin>                
           </plugins>   

       <pluginManagement>
           <plugins>
               <plugin>
                   <groupId>org.eclipse.m2e</groupId>
                   <artifactId>lifecycle-mapping</artifactId>
                   <version>1.0.0</version>
                   <configuration>
                       <lifecycleMappingMetadata>
                           <pluginExecutions>
                               <pluginExecution>
                                   <pluginExecutionFilter>
                                       <groupId>io.swagger</groupId>
                                       <artifactId>swagger-codegen-maven-plugin</artifactId>
                                       <versionRange>[${version.swagger.codegen},)</versionRange>
                                       <goals>
                                           <goal>generate</goal>
                                       </goals>
                                   </pluginExecutionFilter>
                                   <action>
                                       <execute />
                                   </action>
                               </pluginExecution>
                           </pluginExecutions>
                       </lifecycleMappingMetadata>
                   </configuration>
               </plugin>
           </plugins>
       </pluginManagement>          
       </build>

【讨论】:

  • 请注意,插件管理部分是 eclipse 特有的。您应该只需要它来支持 Eclipse(即普通 maven 不需要它)。但是对于日食来说,这很重要,而且很难找到当它不存在时仅在谷歌上搜索它打印的错误。
  • 似乎 spring 将生成服务器端代码,而 java 将生成客户端代码。 github.com/swagger-api/swagger-codegen/issues/5332
  • 你也可以用json文件代替yml。只需先手动将 yml 转换为 json 即可。
【解决方案2】:
<!-- Swagger -->
<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.3.1</version>
    <executions>
        <execution>
            <id>contract-service</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${basedir}/src/main/resources/swagger/rest-data-exchange-format.yaml</inputSpec>
                <artifactId>contract-service</artifactId>
                <output>${basedir}/target/generated-sources</output>
                <language>spring</language>
                <modelPackage>ru.payhub.rest.v1.model</modelPackage>
                <apiPackage>ru.payhub.rest.v1.api</apiPackage>
                <!-- <invokerPackage>ru.payhub.rest.v1.handler</invokerPackage> -->
                <generateSupportingFiles>false</generateSupportingFiles>
                <configOptions>
                    <sourceFolder>src/main/java</sourceFolder>
                    <interfaceOnly>true</interfaceOnly>
                    <library>spring-boot</library>
                    <dateLibrary>${generator.datelibrary}</dateLibrary>
                    <configPackage>ru.payhub.config</configPackage>
                    <singleContentTypes>true</singleContentTypes>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

官方参数说明here

Swagger 语法规范here

在这个示例 maven 插件上,使用 swagger 数据模型文件 (yaml) 生成模型类以在控制器中使用它。

【讨论】:

  • 你能告诉你从哪里得到这些配置选项吗?它们不在链接的页面上。
  • @AleksandrErokhin,您的问题有哪些选项?您可以在“官方参数描述”和官方页面或 github 项目 (github.com/swagger-api/swagger-codegen/blob/master/modules/…) 中找到所有可用选项
  • 我在找configOptions的列表,官方页面上没有。
【解决方案3】:
猜你喜欢
  • 2023-03-04
  • 2018-02-11
  • 2022-10-20
  • 2017-04-15
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多