1 year ago

#76697

test-img

du-it

How can I integrate POM build version into YAML generation using springdoc-openapi-maven-plugin?

Is there a way to programmatically set the build version from the POM of my Spring Boot application into the OpenApi YAML generated by the springdoc-openapi-maven-plugin?

How can I achieve it?

Currently I have integrated the springdoc-openapi-maven-plugin this way:

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

I have an interface to annotate methods with OpenApi annotations:

@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"));
    }
}

I found some information using spring-boot-maven-plugin but I didn't succeed:

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

Update


In the meantime I moved the bean definition from the interface into a @Configuration file/class but when I start the application I get a NullPointerException during the bean creation of 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"));
    }
}

As far as I understood the BuildProperties gets created by the Maven plugin and is available when the myOpenApi is going to be created, but it seems as if this is not the case. (At least with my configuration.)

spring-boot

pom.xml

openapi

springdoc-openapi-maven-plugin

0 Answers

Your Answer

Accepted video resources