#java #spring-boot #maven #swagger #openapi
#java #spring-boot #maven #swagger #openapi
Вопрос:
Моя цель — сгенерировать клиент Spring Boot REST с использованием OpenAPI 3.0.
Я хотел бы сначала сгенерировать файл спецификации OpenAPI (springdoc-openapi-maven-plugin) моего API, а затем сгенерировать клиентский код из этого файла (swagger-codegen-maven-plugin) с помощью Maven.
Моя проблема в том, что swagger-codegen-maven-plugin выполняется перед springdoc-openapi-maven-plugin. Таким образом, выходной файл, сгенерированный springdoc-openapi-maven-plugin, не существует при выполнении swagger-codegen-maven-plugin.
Как выполнить springdoc-openapi-maven-plugin перед swagger-codegen-maven-plugin с учетом следующей конфигурации плагинов сборки Maven?
Моя конфигурация плагина сборки Maven:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<apiDocsUrl>myServerUrl:myPort/v3/api-docs</apiDocsUrl>
<outputFileName>openApiFile.json</outputFileName>
<outputDir>${project.basedir}/src/main/resources</outputDir>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.24</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/openApiFile.json</inputSpec>
<language>typescript-angular</language>
<configOptions>
<sourceFolder>src/gen/java/main</sourceFolder>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ответ №1:
Проблема заключалась в том, что springdoc-openapi-maven-plugin выполняется во integration-test
время фазы, в то время как фаза swagger-codegen-maven-plugin по умолчанию generate-sources
выполняется раньше integration-test
в жизненном цикле сборки.
Я только что указал фазу для swagger-codegen-maven-plugin, которая находится после integration-test
: <phase>post-integration-test</phase>
.