在 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 更好,它在编译时静态运行。
参见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);