Swagger Codegen, плагин Maven: ограничение генерации сервера
Я хочу сгенерировать заглушки сервера JAX-RS для моего API с помощью подключаемого модуля swagger-codegen maven, но я хочу использовать собственный класс реализации службы вместо сгенерированного. Есть ли способ генерировать все, кроме этого класса? Для моего 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>
3 ответа
Правильный способ сделать это через два варианта конфигурации, <generateSupportingFiles>
в конфигурации и <interfaceOnly>
в <configOptions>
, <generateSupportingFiles>
не генерирует исполняемую точку входа, pom.xml
и т.д., в то время как <interfaceOnly>
Флаг не генерирует реализацию сервиса, только интерфейс. Таким образом, вы можете иметь свой собственный исполняемый класс, выполняющий другие вещи, свой собственный pom.xml
и ваша собственная реализация сервиса, и вы можете обновлять API и модель столько раз, сколько захотите, используя mvn clean package
,
Я не уверен, проверяют ли шаблоны Джерси <interfaceOnly
, но шаблоны Spring Boot и CXF JAX-RS делают.
В твоем мавене pom.xml
, ваш <configuration>
внутри плагин сборки swagger-codegen-maven-plugin
нужно будет выглядеть так:
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<interfaceOnly>true</interfaceOnly>
...
</configOptions>
К сожалению, эти параметры конфигурации не очень хорошо документированы, вы должны провести много исследований и наткнуться на них по какой-то проблеме github.
Здесь есть два шага к решению.
Добавьте **/*Controller.java или **/*Impl.java в файл.swagger-codegen-ignore (в целевом / генерируемом источнике). В зависимости от используемого языка реализация по умолчанию предоставляется в файле * Controller.java или * Impl.java. Как только реализация по умолчанию исключена из генерации, вы можете реализовать сгенерированные интерфейсы в своем собственном классе. Код в вашем собственном классе не будет обновляться на mvn clean.
Сам файл swagger-codegen-ignore является автоматически генерируемым файлом, поэтому все, что вы добавляете на шаге 1, обновляется, когда вы выполняете очистку mvn. Чтобы избежать этого, добавьте плагин ниже к вашему 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>
Вы должны использовать файл игнорирования codegen, чтобы предотвратить генерацию реализации классов