[서버][스프링][Kotlin] java.lang.ClassNotFoundException: Cannot find implementation for com.dreamaz.gongga.room.model.RoomMapper

프로그래밍/서버2021. 3. 27. 00:51

문제 현상

잘 동작하던 Java 코드를 Kotlin으로 변경한 후 REST API를 쓰니 아래의 mapstruct 관련 에러가 발생했습니다. 

java.lang.ClassNotFoundException: Cannot find implementation for com.dreamaz.gongga.room.model.RoomMapper

 

원인

kapt를 추가해도 mapstruct 관련 implementation이 생성되지 않았습니다.

어노테이션 프로세서 쪽에서 뭔가가 잘 안되는 것 같습니다.

 

*kapt 추가했지만 안됨

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>kapt</id>
            <goals>
                <goal>kapt</goal>
            </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>src/main/kotlin</sourceDir>
                    <sourceDir>src/main/java</sourceDir>
                </sourceDirs>
                <annotationProcessorPaths>
                    <annotationProcessorPath>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${org.projectlombok.version}</version>
                    </annotationProcessorPath>
                    <annotationProcessorPath>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </annotationProcessorPath>
                </annotationProcessorPaths>
            </configuration>
        </execution>
       생략
    </executions>
	생략
</plugin>

 

해결 방법

IntelliJ에서.. 어째서인지 아직도 빌드/실행 시에 kapt를 포함하지 않습니다.

그래서 annotation proccesor가 필요할 때에는 Maven Project에서 Lifecycle > compile을 클릭하거나 Terminal에 mvn compile을 입력하여 kapt도 수행되도록 해야합니다.

 

 

 

 

 

참고

github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-kotlin

kotlinlang.org/docs/reference/kapt.html

[서버][스프링] Mapstruct와 Lombok 동시 사용할 때 주의할 점

stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together

 

MapStruct and Lombok not working together

Tech Stack being used : Java 8 MapStruct : 1.2.0.Final Lombok: 1.16.18 IDE: IntelliJ - Lombok Plugin already installed Initially, I faced issues when I removed getters and setters and added @Ge...

stackoverflow.com

kotlinlang.org/docs/kapt.html

 

Using kapt | Kotlin

 

kotlinlang.org

colinch4.github.io/2020-12-03/kotlin_kapt/

 

colin's 블로그

개발 강좌 블로그

colinch4.github.io

코틀린을 사용하면 Lombok을 사용할 필요가 없으므로, Lombok을 모두 제거하고 코틀린으로 변경하거나 자바와 코틀린 코드를 별도의 모듈로 분리하여 관리할 수 있다.

devsnote.com/writings/2073

 

뎁스노트 | 코틀린 KAPT를 대체할 KSP 알파 버전 발표.

Kotlin Symbol Processing(KSP) 출시! KAPT 보다 앱 빌드 속도가 2배 빠르다고 합니다. 코틀린 1.4.30 버전부터 호환되구요.   KAPT는 어노테이션 처리를 위해 중간에 자바 Stub을 생성하는 반면에 KSP는 코틀린

devsnote.com

Kotlin Symbol Processing(KSP) 출시!

KAPT 보다 앱 빌드 속도가 2배 빠르다고 합니다.

코틀린 1.4.30 버전부터 호환되구요.

 

KAPT는 어노테이션 처리를 위해 중간에 자바 Stub을 생성하는 반면에

KSP는 코틀린 코드를 직접 파싱하기 때문에 빠르다고 하네요.

github.com/micronaut-projects/micronaut-core/issues/1936

 

Kotlin Annotation processing not working in IntelliJ (although enabled) · Issue #1936 · micronaut-projects/micronaut-core

Hi there, I am trying to get the intellij build working (without delegating to gradle). Although annotation processing is enabled in intellij and although there is not other annotation processor co...

github.com

youtrack.jetbrains.com/issue/KT-15040

 

Support Kapt in IDEA build system (JPS) : KT-15040

Reported at https://github.com/griffon/griffon/issues/189 Creating a JavaFX + Kotlin application following the steps described in the starting guide result in a fully working application when ran from the command line. However running from within IntelliJ

youtrack.jetbrains.com

 

작성자

Posted by 드리머즈

관련 글

댓글 영역