9

我想使用 swagger-codegen maven 插件为我的 API 生成 JAX-RS 服务器存根,但我想使用我自己的服务实现类,而不是生成的那个。有没有办法生成除此类之外的所有内容?对于我的 API,该工具会生成四个 API 类:ProfilesApi、ProfilesApiService、ProfilesApiServiceFactory 和 ProfilesApiServiceImpl。

我当前的 Maven 配置:

                     <configuration>
                        <inputSpec>src/main/resources/Profile.json</inputSpec>
                         <language>jaxrs</language>
                        <configOptions>
                            <dateLibrary>java8</dateLibrary>
                        </configOptions>
                        <models>Profile,PageInformation,ProfileResult</models>
                        <modelPackage>com.myApp.profile-api-model</modelPackage>
                        <apiPackage>com.myApp.profile-api-webapp</apiPackage>
                        <library>jersey2</library>
                        <environmentVariables>
                            <!-- change default client library (here until plugin 2.1.5). Doesn't seem to work! -->
                            <library>jersey2</library>
                            <!-- generate all models -->
                            <models></models>
                            <!-- generate all APIs -->
                            <apis></apis>
                            <!-- generate just the supporting files that are Java source code (not project build files) -->
                            <supportingFiles>ApiException.java,ApiOriginFilter.java,ApiResponseMessage.java,JacksonJsonProvider.java,LocalDateProvider.java,LocalDateTimeProvider.java,NotFoundException.java,StringUtil.java,web.xml,ProfilesApi.java,ProfilesApiService.java,ProfilesApiServiceFactory.java</supportingFiles>
                        </environmentVariables>
                    </configuration>
4

3 回答 3

14

正确的方法是通过两个配置选项,<generateSupportingFiles>在配置中和<interfaceOnly><configOptions>. <generateSupportingFiles>不生成可执行入口点pom.xml等,而flag<interfaceOnly>不生成服务的实现,只生成接口。这样你就可以让你自己的可执行类做其他事情,你自己的pom.xml和你自己的服务实现,并且你可以使用mvn clean package.

我不确定 Jersey 模板是否会检查<interfaceOnly,但 Spring Boot 和 CXF JAX-RS 模板会检查。

在您的 mavenpom.xml中,您的<configuration>内部构建插件swagger-codegen-maven-plugin将需要如下所示:

<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
    <interfaceOnly>true</interfaceOnly>
...
</configOptions>

不幸的是,这些配置选项没有很好的记录,你必须做很多研究并在一些 github 问题上偶然发现它们。

于 2018-02-13T19:35:55.723 回答
-1

这里的解决方案有两个步骤。

  1. 将 **/*Controller.java 或 **/*Impl.java 添加到 .swagger-codegen-ignore 文件(在 target/generated-sources 中)。根据使用的语言,默认实现在 *Controller.java 或 *Impl.java 文件中提供。一旦从生成中排除默认实现,您就可以在自己的类中实现生成的接口。您自己类中的代码不会在 mvn clean 上刷新。

  2. swagger-codegen-ignore 文件本身是一个自动生成的文件,因此当您执行 mvn clean 时,您在步骤 1 中添加的任何内容都会刷新。为避免这种情况,请将以下插件添加到您的 pom 中:

    <plugin>                
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.6.1</version>
    <configuration>
    <excludeDefaultDirectories>true</excludeDefaultDirectories>
    <filesets>
    <fileset>
    <directory>${project.build.directory}</directory>
    <excludes>
    <exclude>generated-sources/.swagger-codegen-ignore</exclude>
    </excludes>
    </fileset>
    </filesets>
    </configuration>
    </plugin>
    
于 2017-01-22T07:20:31.903 回答
-2

您必须使用 codegen 忽略文件来防止生成实现类

于 2016-12-23T21:29:28.947 回答