2016-05-16 3 views
1

Я хочу генерировать заглушки сервера JAX-RS для моего API, используя плагин swagger-codegen maven, но я хочу использовать собственный класс реализации службы, а не тот, который сгенерирован. Есть ли способ генерировать все, кроме этого класса? Для моего API инструмент генерирует четыре класса api: ProfilesApi, ProfilesApiService, ProfilesApiServiceFactory и ProfilesApiServiceImpl.Swagger Codegen, Maven Plugin: Restrict Server Generation

Моя текущая конфигурация 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

Похоже, что вам может быть разумно создать свой собственный шаблон вместо изменения поведения генератора по умолчанию. – fehguy

+0

@fehguy Определение моего собственного генератора и шаблонов, казалось, помогло. Благодаря! –

ответ

0

Вы должны использовать Codegen игнорировать файл для предотвращения генерации классов реализации

-1

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

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

  2. Файл самого swagger-codegen-ignore является автоматически сгенерированным файлом, поэтому все, что вы добавляете на шаге 1, обновляется, когда вы делаете mvn clean. Чтобы избежать этого, добавьте ниже плагин к вашему ПОМ:

    <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> 
    
+0

Не будут ли удалены файлы в сгенерированных источниках, как только вы сделаете 'mvn clean'? И как это должно работать между несколькими разработчиками? Считается, что генерируемые источники не предназначены для контроля источника. – jbx

0

Правильный способ сделать это с помощью двух опций конфигурации, <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.

Смежные вопросы