我想使用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>
答案 0 :(得分:8)
执行此操作的正确方法是通过配置中的两个配置选项<generateSupportingFiles>
和<interfaceOnly>
中的<configOptions>
。 <generateSupportingFiles>
不生成可执行入口点pom.xml
等,而<interfaceOnly>
标志不生成服务的实现,只生成接口。这样,您可以让自己的可执行类执行其他操作,自己的pom.xml
和您自己的服务实现,并且可以使用mvn clean package
重新生成API和模型。
我不确定Jersey模板是否检查<interfaceOnly
,但Spring Boot和CXF JAX-RS模板是否可以。
在您的maven pom.xml
中,<configuration>
的构建插件中的swagger-codegen-maven-plugin
需要如下所示:
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<interfaceOnly>true</interfaceOnly>
...
</configOptions>
不幸的是,这些配置选项并没有很好的记录,你必须做很多研究,并在一些github问题上偶然发现它们。
答案 1 :(得分:-1)
您必须使用codegen ignore文件来阻止生成实现类
答案 2 :(得分:-1)
此解决方案有两个步骤。
将** / * Controller.java或** / * Impl.java添加到.swagger-codegen-ignore文件(在target / generated-sources中)。根据使用的语言,* Controller.java或* Impl.java文件中提供了默认实现。从生成中排除默认实现后,您可以在自己的类中实现生成的接口。您自己班级中的代码不会在mvn clean上刷新。
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>