Сделать плагин swagger codegen maven доступным к файлам yaml из другой зависимости maven - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть API, написанный на Swagger, для которого я хочу генерировать как реализацию Службы, так и клиента, и они должны быть в отдельных модулях maven.

Я думал о том, чтобы разделить их на 3 отдельных модуля Maven (или подмодули одного и того же родительского модуля).

parent
 +- api
    +- src/main/resources/api/service.yaml
 +- client
 +- service

Тогда и в клиенте, и в сервисе я получу swagger-codegen-maven-plugin.Таким образом, оба будут синхронизированы, и я буду поддерживать сервис только из одного места.Другие клиенты также могут зависеть от артефакта api и генерировать свой код из определения service.yaml Swagger API.

Моя сложность заключается в том, как заставить сервис и клиент ссылаться на service.yaml в другом Maven.Зависимость?

Это то, что у меня в данный момент есть в службе pom.xml, но это относится к локальным ресурсам модуля службы, а не к зависимости api maven.

 <plugin>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-codegen-maven-plugin</artifactId>
        <version>${io.swagger.codegen.version}</version>
        <executions>
          <execution>
            <id>api</id>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>            
<!-- can this refer to another maven dependency's resources? --> 
<inputSpec>${basedir}/src/main/resources/api/service.yaml</inputSpec>
              <language>spring</language>
              <library>spring-boot</library>
              <modelPackage>com.test.model</modelPackage>
              <apiPackage>com.test.api</apiPackage>
              <generateSupportingFiles>false</generateSupportingFiles>
              <configOptions>
                <java8>true</java8>
                <dateLibrary>java8</dateLibrary>
                <interfaceOnly>true</interfaceOnly>
              </configOptions>
            </configuration>
          </execution>
       </executions>
    </plugin>

Не уверен, что это то, что я должен сделать из Maven, чтобы сослаться на ресурсы из другой зависимости maven, или что-то, что мне нужно сделать в конфигурации плагина swagger.

1 Ответ

0 голосов
/ 20 ноября 2018

Решение, которое мне удалось найти, заключается в использовании maven-remote-resources-pluginpom.xml проекта maven, который должен предоставлять ресурсы, вы можете поместить:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>bundle</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <includes>
            <include>**/*.yaml</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>

Затем в проекте, который должен их импортировать, проект должен называться следующим образом:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-remote-resources-plugin</artifactId>
    <configuration>
      <resourceBundles>
        <resourceBundle>group:api:version</resourceBundle>
      </resourceBundles>
    </configuration>
    <executions>
      <execution>
        <phase>
          generate-sources
        </phase>
        <goals>
          <goal>process</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

, где group:api:version - это идентификатор группы, идентификатор артефакта и версия зависимости maven, раскрывающей ресурсы.

Наконец, внутри конфигурации swagger-codegen-maven-plugin файл yaml может называться:

<inputSpec>${project.build.directory}/maven-shared-archive-resources/api/service.yaml</inputSpec>
...