기본적으로 IntelliJ로 Java기반 개발시 필수적으로 쓰는 플러그인 중 하나가 Lombok이고 이를 위해서 Annotation Processing을 활성화 시켜준다.

Lombok 의존성을 등록한다.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>${lombok.version}</version>
Lombok을 Maven Build Plugin에 등록한다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
이후 Lombok에 대해서 테스트 후, Entity ↔ DTO 동적 생성을 위한 MapStruct 의존성을 등록한다.
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
MapStruct에 대해서도 Maven Build Plugin에 등록한다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
빌드된 폴더에는 Lombok annotation을 통해서 생성된 클래스(Generated classes)가 존재하므로, 현재까지는 MapStruct을 통해서 생성된 클래스들과 함께 참조하는데 문제가 없다.
maven clean이 아니더라도, IntelliJ 재시작 또는 다른 프로젝트를 오픈 후 돌아왔을 때, IntelliJ상에서는 문제없이 참조되고 있으나, 빌드시에 Lombok을 통해서 생성되는 클래스들에 대해서 참조가 정상적으로 이루어지지 않는다.

참고로 IDE상에서는 전혀 문제가 없다.

내가 예상하기로는 어떤 연유에서든지 maven build를 하게되면 MapStructs Annotation을 통해서만 생성된 클래스에 대해서만 참조가 이루어지고, Lombok을 통해서 생성된 클래스 또는 메소드들에 대한 참조가 불가능하게 된 것이라고 판단이 된다.
Maven Build Plugin상의 annotationProcessorPaths에 Lombok을 추가한다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<annotationProcessorPaths>
**<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>**
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>