I consider that my maven has problems with the annotation @Data from lombok.
About the project: Java 23 Spring Boot Version 3.3.4 also using Intellij ultimate
The error appears after like mvn compile or when I started the application:
COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /*/controller/ImageController.java:[25,16] Symbol doesn't found
Symbol: Method getImages()
Location: Variable request from Typ *.dto.ImageUploadRequest
[ERROR] */controller/ImageController.java:[30,67] Symbol doesn't found
Symbol: Method getDataURL()
Location: Variable image from Typ *.entity.Image
I tried serveral methods.The logic is btw works.After serervall restarts this error appears. In Terminal:
mvn clean; mvn compile; mvn install; mvn clean install
POM but it didn't help
<plugin>
<groupId>.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.20.0</version>
</plugin> `This snippet from stackoverflow`
I tried to write the boiler code and yes it works but That is not the way I would walk. My user looks like this:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@Table(name = "player")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NonNull
private String name;
@NonNull
private Integer score;
}
My pom looks like this:
<properties>
<java.version>23</java.version>
</properties>
<dependencies>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.3.4</version>
</dependency>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>*.ZoomOutApiApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.20.0</version>
</plugin>
</plugins>
</build>
I consider that my maven has problems with the annotation @Data from lombok.
About the project: Java 23 Spring Boot Version 3.3.4 also using Intellij ultimate
The error appears after like mvn compile or when I started the application:
COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /*/controller/ImageController.java:[25,16] Symbol doesn't found
Symbol: Method getImages()
Location: Variable request from Typ *.dto.ImageUploadRequest
[ERROR] */controller/ImageController.java:[30,67] Symbol doesn't found
Symbol: Method getDataURL()
Location: Variable image from Typ *.entity.Image
I tried serveral methods.The logic is btw works.After serervall restarts this error appears. In Terminal:
mvn clean; mvn compile; mvn install; mvn clean install
POM but it didn't help
<plugin>
<groupId>.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.20.0</version>
</plugin> `This snippet from stackoverflow`
I tried to write the boiler code and yes it works but That is not the way I would walk. My user looks like this:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@Table(name = "player")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NonNull
private String name;
@NonNull
private Integer score;
}
My pom looks like this:
<properties>
<java.version>23</java.version>
</properties>
<dependencies>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.3.4</version>
</dependency>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>*.ZoomOutApiApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.20.0</version>
</plugin>
</plugins>
</build>
Share
Improve this question
asked Nov 18, 2024 at 20:24
JoFJoF
437 bronze badges
6
|
Show 1 more comment
2 Answers
Reset to default 2Lombok commonly breaks with (major) Java updates due to relying on unsupported APIs/unsafe operations. To deal with that, the developers of Lombok provide updates whenever a new Java version breaks it.
In your case, you specified version 1.18.30 which was released in September 2023 which Java 23 was released in September 2024. So, to run Lombok with Java 23, you should update to the latest version which is 1.18.36 (at the time of writing). In the changelog, you can also see JDK 23 support mentioned for that version.
<dependency>
<groupId>.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
It also seems like you are using the lombok-maven-plugin
. I think this shouldn't be necessary for most purposes unless you are delomboking for any reason.
Apart from that annotation processing has been disabled by default in JDK 23 so you would need to use -proc:full
as a compiler argument to add annotation processing. In Maven, you can do this using the maven-compiler-plugin
:
<build>
<plugins>
<plugin>
<groupId>.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<proc>full</proc>
</configuration>
</plugin>
</plugins>
</build>
Instead of <proc>full</proc>
, you can also use <compilerArgs>
with an argument containing -proc:full
:
<build>
<plugins>
<plugin>
<groupId>.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<compilerArgs>
<arg>-proc:full</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
Dan's answer didn't work for me, but somehow doing my own thing worked. I'm putting it here for anybody else with the same problem:
What worked for me is to put the following into Build in my pom.xml:
<build>
<plugins>
<plugin>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.20.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
<arg>-proc:full</arg>
to the<compilerArgs>
(in themaven-compiler-plugin
). – dan1st Commented Nov 18, 2024 at 21:44maven-compiler-plugin
and add lombok as a dependency to the compiler as well. Your dependencies are also flawed for using Spring boot. Assuming you have the parent remove theversion
from your dependencies you currently have, to let Spring Boot mange the proper compatible version (and you are now even mixing modules from at least 2 Spring Boot versions!). – M. Deinum Commented Nov 19, 2024 at 6:59