빨간오이
138
2020-11-02 15:26:07
3
468

Maven 환경에서 Mapstruct - Lombok 세팅하기


Maven을 Build 도구로 사용하는 Java Project에서 Mapstruct + Lombok 을 세팅하는 팁을 올려드립니다.

Lombok 은 대부분 개발자들께서 익히 아시는 getter/setter의 보일러코드를 줄여주는 유명한 라이브러리이며, Mapstruct 는 최근 각광받고 있는 Mapper 라이브러리(정확히는 Mapping Code 생성기)입니다.

이 글에서는 Lombok 코딩 방법이나 Mapstruct의 구체적인 사용법을 설명하지 않습니다.

Lombok과 Mapstruct 는 모두 annotation processor 에 의해 동작하는 것들이며, 원래는 둘을 함께 사용할 수 없지만, 두 팀의 협업으로 Mapstruct 1.2.0.Beta1 이후 버전과 Lombok 1.16.14 이후 버전에서 함께 사용할 수 있도록 수정되었습니다.

Lombok은 원래 특별한 세팅없이 사용 가능(빌드시 annotation processor 가 자동으로 동작합니다.)하지만, Mapstruct 와 함께 사용시에는 다음과 같이 세팅이 필요합니다.

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>


여기까지 하면, maven build 시에 mapstruct 와 lombok이 함께 잘 동작합니다. (물론, 각 IDE에 맞는 Lombok extension은 당연히 설치되어 있어야 합니다.) 그러나, vscode-java 에서나 eclipse-jdt 에서는 다음과 같은 오류가 발생합니다.

   java.lang.NoClassDefFoundError: org/mapstruct/ap/spi/AstModifyingAnnotationProcessor


아래 문서에 보면 이에 대하여 1.4.0 마일스톤에 추가하였다고 나옵니다. 

https://github.com/mapstruct/mapstruct/issues/1159



따라서, 1.4.0-Beta1 이상의 버전을 사용하면 문제 Eclispe와 VSCode에서도 문제없이 작동합니다. 즉 다음과 같이 Mapstruct 최신 버전을 쓰도록 합시다.

Mapstruct : 1.4.0 이상

Lombok : 1.16.14 이상

0
  • 댓글 3

  • 빨간오이
    138
    2020-11-02 15:27:18

    캡쳐한 그림이 안나오네요. 그냥 저 링크 따라가보면, 긴 쓰레드 아래쪽에 1.4.0 milestone 이란 게 나옵니다.

  • twinings
    45
    2020-11-04 11:25:20

    혹시 여기에 QUERY DSL 추가해서 사용하는 방법도 아실까요 ? 

    저도 위와같이 사용하는데 세가지를 한꺼번에 하려니 문제가 생기네요.

  • 빨간오이
    138
    2020-11-04 19:48:10

    querydsl은 같이 써보지 않았네요.

    검색하니까 나오긴 하는데... 함 해보세요. 맨 마지막 답변글이에요. 저기 mapstruct, lombok, querydsl, jpa 까지 들어있네요.

    https://stackoverflow.com/questions/44522494/how-to-make-querydsl-and-lombok-work-together

    제가 해보기에는 시간이 없네요. ㅎㅎ

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.