Jersey Jax-RS com.github.kongchen:swagger-maven-plugin 的 OpenAPI 等效项?

问题描述 投票:0回答:1

在 Swagger 中,您可以使用

swagger-maven-plugin
在编译时构建合约 .json。

<plugin>
    <groupId>com.github.kongchen</groupId>
    <artifactId>swagger-maven-plugin</artifactId>
    <version>3.1.3</version>
    <configuration>
        <apiSources>
            <apiSource>
                <springmvc>false</springmvc>
                <locations>com.example.rest.resources</locations>
                <schemes>https</schemes>
                <info>
                    <title>project Service</title>
                    <version>v2</version>
                    <description>Description here.</description>
                    <contact>
                        <email>[email protected]</email>
                        <name>project Service</name>
                    </contact>
                </info>
                <outputPath>${basedir}/target/generated-resources/document.html</outputPath>
                <swaggerDirectory>${basedir}/target/generated-resources</swaggerDirectory>
            </apiSource>
        </apiSources>
    </configuration>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

是否有等效的方法给定一个 Jax-RS maven 项目,使用插件在 maven 构建时使用当前项目的 java 源生成存根来创建 OpenAPI 客户端?

我发现了一个项目,它使用集成测试阶段来使用 spring 测试运行器实际启动应用程序,然后使用 http 端点来构建合约。

我想它可以工作,但不是很方便。 swagger 更好,它在编译时静态运行。

java maven openapi maven-plugin
1个回答
0
投票

参见https://github.com/springdoc/springdoc-openapi/issues/140

查看 springdoc-openapi-maven-plugin ,它可以帮助您在 maven 集成测试阶段生成 yml/json OpenAPI 描述。

https://github.com/springdoc/springdoc-openapi-maven-plugin

请注意,这不会在编译时执行。但当您有正在运行的 Spring 服务器可用时,它会在集成测试阶段执行此操作。

我能找到的似乎还没有为此目的的 Maven 插件。

您可以在 Java 中非常简单地完成此操作。

假设您有一个 Jax-RS 应用程序:

YourResourceConfigurationWithOpenApi
这是一个如何在不运行 Spring boot 应用程序的情况下编写 yaml 的示例:

OpenApiContext ctx = new JaxrsOpenApiContextBuilder()
                    .application(new YourResourceConfigurationWithOpenApi())
                    .buildContext(true);
OpenAPI oas = ctx.read();
String res = ctx.getOutputYamlMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(oas);
System.out.println(res);
© www.soinside.com 2019 - 2024. All rights reserved.