Сделать плагин swagger codegen maven доступным к файлам yaml из другой зависимости maven
У меня есть 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 ответ
Решение, которое мне удалось найти, заключается в использовании maven-remote-resources-plugin
, в pom.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>