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.

Здесь есть два шага к решению.

  1. Добавьте **/*Controller.java или **/*Impl.java в файл.swagger-codegen-ignore (в целевом / генерируемом источнике). В зависимости от используемого языка реализация по умолчанию предоставляется в файле * Controller.java или * Impl.java. Как только реализация по умолчанию исключена из генерации, вы можете реализовать сгенерированные интерфейсы в своем собственном классе. Код в вашем собственном классе не будет обновляться на mvn clean.

  2. Сам файл 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, чтобы предотвратить генерацию реализации классов

Другие вопросы по тегам