如何使用 springdoc-openapi-maven-plugin 将 POM 构建版本集成到 YAML 生成中?

du-*_*-it 5 pom.xml spring-boot openapi springdoc-openapi-maven-plugin

有没有办法以编程方式将构建版本从 Spring Boot 应用程序的 POM 设置为 springdoc-openapi-maven-plugin 生成的 OpenApi YAML?

我怎样才能实现它?

目前我已经通过这种方式集成了 springdoc-openapi-maven-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>http://localhost:9090/v3/api-docs.yaml</apiDocsUrl>
            <outputFileName>my_open_api_specification.yml</outputFileName>
            <outputDir>${project.build.directory}/my_open_api_specification/</outputDir>
            <skip>false</skip>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

我有一个使用 OpenApi 注释来注释方法的接口:

@Tag(name = "API Operationen")
@RequestMapping
public interface RestApi {
...

    @Bean
    default OpenAPI myOpenApi() {
    
        return new OpenAPI()
            .info(new Info()
                .title("The title")
                .version("1.0")           <-- I want to dynamically set this version with the value coming from  BuildProperties (POM version).
                .description("The description"));
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用 spring-boot-maven-plugin 找到了一些信息,但没有成功:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!-- <version>2.5.4</version> -->
    <executions>
        <execution>
            <goals>
                <goal>build-info</goal>
            </goals>
        </execution>
        </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

更新


与此同时,我将 bean 定义从接口移动到 @Configuration 文件/类中,但是当我启动应用程序时,我在 bean 创建期间收到 NullPointerException myOpenApi

@Configuration
@ConfigurationPropertiesScan("xxx")
@RequiredArgsConstructor
public class OpenApiConfig {

    @Autowired    // <-- was missing
    BuildProperties buildProperties;

    @Bean
    OpenAPI myOpenApi() {

        return new OpenAPI()
            .info(new Info()
                .title("FooBar")
                .version(buildProperties.getVersion())
                .description("blablabla"));
    }
}
Run Code Online (Sandbox Code Playgroud)

据我了解,BuildProperties 是由 Maven 插件创建的,并且在myOpenApi创建时可用,但似乎情况并非如此。(至少在我的配置中是这样。)