After upgrading from Java 11 to Java 17, I'm encountering compilation errors related to Lombok's @FieldNameConstants annotation. I'm also using MapStruct, so I'm mentioning that in case that could be related to their annotation processors somehow.
Error
error: cannot find symbol
import static com.example.dto.ContactRegistration.Fields.contactGuid;
^
symbol: class Fields
location: class ContactRegistration
Environment
- Java Version: 17
- Lombok Version: 1.18.34
- MapStruct Version: 1.6.3
- MapStruct Binding Version: 0.2.0
- Build Tool: Gradle 7.6
Gradle Configuration
lombokVersion = '1.18.34'
mapstructVersion = '1.6.3'
mapstructBindingVersion = '0.2.0'
dependencies {
implementation("org.mapstruct:mapstruct:${mapstructVersion}")
implementation("org.projectlombok:lombok:${lombokVersion}")
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
annotationProcessor "org.projectlombok:lombok-mapstruct-binding:${mapstructBindingVersion}"
}
Auto-generated DTO (from OpenAPI/YAML)
The DTOs are generated from a YAML specification with Lombok imports:
x-imports:
- lombok.experimental.FieldNameConstants
Resulting generated class:
import lombok.experimental.FieldNameConstants;
import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.validation.constraints.Size;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.Valid;
@FieldNameConstants
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class ContactRegistration extends org.springframework.hateoas.RepresentationModel {
@Pattern(regexp = ".*\\S.*", message = "PATTERN_INVALID")
@Size(min = 1, max = 100)
private String firstName;
@Valid
private Address address;
@Size(min = 1, max = 100)
private String contactGuid;
// Getters and setters omitted for brevity
}
Question
Since the DTOs are auto-generated from OpenAPI/YAML files, I cannot manually add the Fields class. The error only appeared after upgrading to Java 17.
What configuration changes are needed to make Lombok's @FieldNameConstants work properly with Java 17 and MapStruct?
Is this a known issue with the annotation processor ordering or Java 17 compatibility?
Thank you.