에러

프로젝트 초기체크 에러발생 Caused by: org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException

chandlerxx 2023. 12. 23. 00:56

스프링부트-JPA를 진행하기 위해 spring initializr를 통해 프로젝트를 새로 생성했고 라이브러리도 추가했습니다.

프로젝트 시작전 초기 체크단계(빌드된 상태)에서 아래와 같은 에러가 발생했습니다. 

 

아래 참조하시기 바랍니다.

 

1. 개발환경


  • IDE : IntelliJ IDEA Community
  • OS : window
  • SpringBoot 3.2.1
  • Java17
  • Gradle (gradle-8.5-bin)

 

2. 에러


프로젝트 시작 전에, gradle 설정 확인 이후 빌드된 Application은 정상 작동하는지 사전에 수행해봐야합니다.

제 경우에는 Test에서 fail이 발생했네요.

  • src/main/java/{project_info}/{project_info}/Application -> OK
  • src/test/java/{project_info}/{project_info}/ApplicationTest -> Fail

 

 

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ApplicationTests {

	@Test
	void contextLoads() {
	}

}

 

에러코드는 아래와 같습니다.

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'jpabook.jpashop.ApplicationTests'.
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:54)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: jpabook.jpashop.ApplicationTests
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:68)
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:170)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:104)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:94)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
... 18 more
Caused by: java.lang.ClassNotFoundException: jpabook.jpashop.ApplicationTests
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)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:168)
... 23 more

 

 

3. 원인& 해결


결론부터 말씀 드리면, Windows에서 사용하는 한글 인코딩과 JVM에서 사용하는 file encoding이 달라서 프로젝트의 파일들을 제대로 읽지 못하는 경우가 있습니다. 즉, 무언가 꼬여있을 가능성이 높습니다.

아래 절차대로 해결하시기 바랍니다.

(해결과정 중 궁금하신 내용은 참조1, 참조2 각 블로그 참고 하시기 바랍니다)

 

1. VM options 변경이 필요합니다.

Help -> Edit Custom VM option -> 아래 옵션이 제대로 적용되었는지 확인해주세요. 

  • Dfile.encoding=UTF-8
  • Dconsole.encoding=UTF-8

제 경우에는 이미 추가되어 있었습니다.

 

2. 현재 프로젝트가 위치한 상위 경로에 한글파일 폴더가 존재하는 상황인지 확인해주세요.

 

저는 파일 경로에 특수문자 조합으로 꼬여있어서 아마 이것 때문에 인코딩에러 발생한게 아닐까싶네요.

아무튼 프로젝트 위치를 변경하였습니다.

 

file:///C:/Users/PSM/Desktop/%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4/Backend/001.%20springboot

(본인 에러 코드 확인 바랍니다.)

 

3. 프로젝트 초기화

File -> Open -> 해당 프로젝트의 build.gradle을 선택해주세요. 그 다음에 선택창이 뜨는데, Open as Project를 선택해주세요. (노트북 성능에 따라 시간이 어느 정도 소요될 수 있습니다)

 

 

4. 빌드 성공했네요. 

  • src/main/java/{project_info}/{project_info}/Application -> OK
  • src/test/java/{project_info}/{project_info}/ApplicationTest -> Fail-> OK

 

 

이제 프로젝트를 본격적으로 시작하면 될 것 같네요:)

감사합니다.