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.
Recommended Solutions
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:
<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>
openApiGenerate {
generatorName = "spring"
configOptions = [
useSpringBoot3: "true"
]
// other configurations
}
Alternative Approach
If you need Jakarta EE support without Spring Boot 3, use useJakartaEe=true
:
<configOptions>
<useJakartaEe>true</useJakartaEe>
</configOptions>
Command Line Configuration
For CLI users, pass these properties directly:
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 (notjava
or others)
CONFIGURATION WARNINGS
Generator Version Requirements
Use OpenAPI Generator v6.3.0+. Earlier versions lack proper Spring Boot 3 support.Avoid Redundant Configuration
Don't combine both options simultaneously:xml<!-- ❌ Anti-pattern --> <useSpringBoot3>true</useSpringBoot3> <useJakartaEe>true</useJakartaEe>
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:
// Correct Jakarta import
import jakarta.annotation.Generated;
// ❌ Incorrect legacy import
// import javax.annotation.Generated;
If issues persist:
- Confirm plugin version (7.3.0+ recommended)
- Check generator name (
<generatorName>spring</generatorName>
) - Validate Maven/Gradle build runs after cleaning caches