GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

No menu could be recovered. Follow the blue links in the page.

This view

  • Original page
  • New address

GeezerVison is showing springdoc.org — Maven and Gradle Plugins - springdoc-openapi

springdoc-openapi Maven and Gradle Plugins

Table of Contents
Back to index
  • Springdoc-openapi Plugins
    • Maven plugin
    • Gradle plugin

Springdoc-openapi Plugins

Maven plugin

The aim of springdoc-openapi-maven-plugin is to generate the OpenAPI description of a Spring Boot application, in JSON or YAML, during the Maven build. It works in conjunction with the spring-boot-maven-plugin: the application is started before the integration tests, the generate goal downloads the description that springdoc-openapi serves at /v3/api-docs, writes it to target/openapi.json, and the application is stopped again.

In order to use it, add both plugins to the plugins section of your pom.xml:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot-maven-plugin.version}</version>
    <configuration>
        <jvmArguments>-Dspring.application.admin.enabled=true</jvmArguments>
    </configuration>
    <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.6</version>
    <executions>
        <execution>
            <id>integration-test</id>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Then run:

mvn verify

The generate goal is configured in the configuration block of the plugin, for example to fail the build on error and attach the file to the project, so it is installed and deployed with the other artifacts:

<configuration>
    <apiDocsUrl>http://localhost:8080/v3/api-docs</apiDocsUrl>
    <outputFileName>openapi.json</outputFileName>
    <outputDir>${project.build.directory}</outputDir>
    <attachArtifact>true</attachArtifact>
    <failOnError>true</failOnError>
    <headers>
        <Authorization>Bearer my-token</Authorization>
    </headers>
</configuration>

The other parameters are attachArtifactClassifier (default openapi), timeout (in seconds, default 60) and skip. Each parameter can also be set from the command line with its springdoc.* user property, for example mvn verify -Dspringdoc.skip=true. For a YAML description, use localhost:8080/v3/api-docs.yaml as apiDocsUrl and openapi.yaml as outputFileName.

Set failOnError to true on CI: by default, a failure is only logged, and the build goes on without the file. When the build fails, Maven skips spring-boot:stop, so the application keeps running: stop it before the next build.

Since version 1.6, the report goal adds an OpenAPI Documentation page, rendered with Swagger UI, to the Maven site. It reads the file written by the generate goal, or fetches the description from apiDocsUrl if the file does not exist. Add the plugin to the reporting section of your pom.xml:

<reporting>
    <plugins>
        <plugin>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-maven-plugin</artifactId>
            <version>1.6</version>
            <reportSets>
                <reportSet>
                    <reports>
                        <report>report</report>
                    </reports>
                </reportSet>
            </reportSets>
        </plugin>
    </plugins>
</reporting>

Then generate the description and the site in the same build:

mvn verify site
The report needs maven-site-plugin 3.9.1 or later, and only supports a JSON description. The Swagger UI files are loaded from unpkg.com, so the page needs internet access when it is viewed.

The plugin runs on Java 8 and later, with Maven 3.6.3 and later. For all the parameters of both goals, you can consult the plugin documentation:

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

Gradle plugin

The aim of springdoc-openapi-gradle-plugin is to generate the OpenAPI description of a Spring Boot application during the Gradle build. Its generateOpenApiDocs task starts the application with the settings of the bootRun task, downloads the OpenAPI description, writes it to build/openapi.json, and stops the application again. When nothing has changed since the last run, the task is up to date and the application is not started. The plugin supports the Gradle configuration cache.

In order to use it, add the plugin next to the Spring Boot plugin, in your build.gradle.kts:

plugins {
    java
    id("org.springframework.boot") version "4.1.2"
    id("org.springdoc.openapi-gradle-plugin") version "2.1.0"
}

Then run:

./gradlew generateOpenApiDocs

The plugin is configured in the openApi block, for example to start the application with another profile:

openApi {
    apiDocsUrl.set("http://localhost:8080/v3/api-docs")
    outputFileName.set("openapi.json")
    customBootRun {
        args.set(listOf("--spring.profiles.active=openapi"))
    }
}
Since version 2.0, the plugin starts the application itself: the forkedSpringBootRun and forkedSpringBootStop tasks of the 1.x versions are gone. Since version 2.1, it no longer applies the Spring Boot plugin itself: your build must apply org.springframework.boot, as above. See Migrating from 1.x.

The plugin needs Gradle 8.0 or later. For more custom configuration of springdoc-openapi-gradle-plugin, you can consult the plugin documentation, with examples for both the Kotlin and the Groovy DSL:

  • https://github.com/springdoc/springdoc-openapi-gradle-plugin

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.