수많은 오류와 버그를 뒤로하고 결국 성공했습니다. 저는 지금 환희와 분노에 차 야심한 새벽 1시에 블로그 글을 쓰고 있습니다. 생각해보니 별거 아닌 실수 때문에 발생한 일이라서 쓰기 부끄럽지만, 혹시나 제 경험이 다른 분들께 도움이 될 수 있을까 하는 희망에 이 글을 씁니다.
당신이 만약 코딩 고수시라면 저를 비웃으셔도 됩니다.
하지만 당신이 만약 막 스프링부트 + 롬복 (lombok) 프로젝트에 mapstruct을 도입하고자 하는데, 계속 원인 모를 오류가 나서문제를 해결하지 못하셨다면, 이 글이 아주 약간이나마 도움이 될 수도 있습니다.
결론부터 말씀드리자면,
그래들 클린 빌드 하세요.
롬복을 사용하신다면 build.gradle 을 다시 확인하셔서, lombok-mapstruct-binding
이 implementation으로 되어있다면 annotationProcessor로 바꾸세요.
(옵셔널) 인텔리제이 플러그인 설치하세요.
입니다...
./gradlew clean build
를 하시면 해결됩니다.
공식 깃허브에도 ./mvnw clean install
을 하라고 명시되어 있는데 저는 인텔리제이가 다 알아서 해줄 거라고 착각을 했습니다...
error: No property named "room.id" exists in source parameter(s). Type "Coupon" has no properties.
lombok-mapstruct-binding
이 implementation으로 되어있다면 annotationProcessor로 바꾸세요.
https://mapstruct.org/faq/#Can-I-use-MapStruct-together-with-Project-Lombok
저는 위 글을 읽었고, 비교적 최신 롬복과 맵스트럭은 서로 호환이 당연히 잘 되어있을 것이라고, 모든 버그가 다 잡혀있을 것이라고 착각했습니다.
저는 저기 있는 링크를 눌렀고,
https://central.sonatype.com/artifact/org.projectlombok/lombok-mapstruct-binding?smo=true
링크는 여기로 연결이 되었고,
저는 저기 적혀있는 그대로 따라했습니다. 그러면 안 되었는데...
결국 시도를 하다가,
https://github.com/mapstruct/mapstruct-examples/blob/main/mapstruct-lombok/pom.xml
맵스트럭 공식 예시 레포에서 충격적인 코드를 보고 맙니다.
annotatationProcessorPaths
저의 그래들 지식이 부족하여 발생한 비극이었습니다. 기반 지식을 더 많이 쌓고 공부를 게을리하지 말아야 하겠습니다.
마지막 줄에 짤막하게 인텔리제이를 위한 플러그인에 대한 언급이 있는데, 저는 이를 못 보고 지나갔어요...
저는 프로젝트 도중에 위와 같은 버그를 발견해, 시간에 쫓기다 그만 맵스트럭 도입을 포기했는데, 프로젝트 끝나고 맵스트럭 도입을 포기한게 아쉬워서 계속 시도하가 결국 해결하게 되었습니다.
저희와 같은 실수로 시간을 낭비하거나 도입을 포기하시는 분들이 덜 생기기를 바라면서 이 글을 마칩니다.
멋진 글이네요!! 플러그인으로 인해 문제가 생기면 정말 난감하더라구요😂
이 글이 많은 사람들에게 유용하기를!