Как сгенерировать клиентский код с помощью springdoc-openapi-maven-plugin и swagger-codegen-maven-plugin?

#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> .