[TS] `java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses` - Error 해결
2024. 3. 14. 17:32ㆍJAVA & Kotiln
위 에러는 Java로 작성되어있는 코드를
Kotlin으로 리팩토링 중 발생했다
먼저 코드 리팩토링에 앞서
Kotlin으로 여러 test case를 만들어 놓은 후
리팩토링을 진행했다.
이 후 Test코드를 실행 시켰는데 아래와 같은 에러를 보게되었다.
Caused by: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers$2.lambda$discover$3(PreferredConstructorDiscoverer.java:163)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers$2.discover(PreferredConstructorDiscoverer.java:160)
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer.discover(PreferredConstructorDiscoverer.java:79)
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:112)
at org.springframework.data.jpa.mapping.JpaPersistentEntityImpl.<init>(JpaPersistentEntityImpl.java:59)
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.createPersistentEntity(JpaMetamodelMappingContext.java:71)
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.createPersistentEntity(JpaMetamodelMappingContext.java:44)
at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:430)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:406)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:291)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:209)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:92)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$6(RepositoryFactoryBeanSupport.java:325)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:325)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:144)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
... 103 more
Caused by: java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 122 more
Kotlin Class 에 대한 Reflection을 하지못해 발생 한 에러임을 확인하고
아래와 같은 의존성을 추가 하니 해결 되었다.
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.6.21'
JPA를 사용하는 코드여서
리팩토링 과정 중 Kotlin에 대한 plugin만 추가해 주었는데
리플렉트에 관한 라이브러리도 추가 해 주어야 한다는걸 배웠다
아래는 사용된 build.gradle에 작성한 Kotiln plugin 정보다
id 'org.jetbrains.kotlin.jvm' version '1.6.21'
id 'org.jetbrains.kotlin.plugin.jpa' version '1.6.21
#참고 Inflearn - 최태현님 강의