Skip to content

Jakarta EE Configuration for OpenAPI Generator in Spring Boot 3

Problem Statement

After migrating to Spring Boot 3, projects must transition from javax packages to jakarta packages due to Jakarta EE 9+'s namespace change. When using OpenAPI Generator to create API clients or server stubs, you might encounter compilation errors due to unresolved javax imports. The most common issue is the generator attempting to use javax.annotation.Generated instead of the new Jakarta equivalents. This problem occurs when OpenAPI Generator hasn't been configured to recognize the Jakarta EE namespace.

Optimal Configuration Approach

Set useSpringBoot3=true in your generator configuration. This implicitly enables Jakarta EE support and ensures all Spring Boot 3-specific defaults are applied:

xml
<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>7.3.0</version> <!-- Always use latest version -->
    <configuration>
        <configOptions>
            <useSpringBoot3>true</useSpringBoot3>
        </configOptions>
        <!-- other configurations -->
    </configuration>
</plugin>
groovy
openApiGenerate {
    generatorName = "spring"
    configOptions = [
        useSpringBoot3: "true"
    ]
    // other configurations
}

Alternative Approach

If you need Jakarta EE support without Spring Boot 3, use useJakartaEe=true:

xml
<configOptions>
    <useJakartaEe>true</useJakartaEe>
</configOptions>

Command Line Configuration

For CLI users, pass these properties directly:

bash
openapi-generator generate -g spring \
  --additional-properties=useSpringBoot3=true \
  -i spec.yaml

Key Explanations

WHY USE useSpringBoot3?

  • Sets Jakarta EE namespace automatically
  • Enables Spring Boot 3-specific annotations
  • Configures validation libraries correctly
  • Sets default Java version to 17
  • Only available in spring generator (not java or others)

CONFIGURATION WARNINGS

  1. Generator Version Requirements
    Use OpenAPI Generator v6.3.0+. Earlier versions lack proper Spring Boot 3 support.

  2. Avoid Redundant Configuration
    Don't combine both options simultaneously:

    xml
    <!-- ❌ Anti-pattern -->
    <useSpringBoot3>true</useSpringBoot3>
    <useJakartaEe>true</useJakartaEe>
  3. Generator-Specific Behavior
    If using non-Spring generators (e.g., java), explicitly set:

    xml
    <configOptions>
      <useJakartaEe>true</useJakartaEe>
    </configOptions>

Post-Generation Validation

Verify Jakarta imports appear in generated files:

java
// Correct Jakarta import
import jakarta.annotation.Generated;

// ❌ Incorrect legacy import
// import javax.annotation.Generated;

If issues persist:

  1. Confirm plugin version (7.3.0+ recommended)
  2. Check generator name (<generatorName>spring</generatorName>)
  3. Validate Maven/Gradle build runs after cleaning caches

Reference Documentation