스프링 스타터, ClassNotFoundException 에러

도람·2025년 6월 8일
post-thumbnail

스프링부트 스타터

  • 스프링 부트 스타터는 의존성이 모여 있는 그룹.
  • spring-boot-starter-[작업유형] 이라는 명명규칙이 있다.

<자주 사용하는 스타터>

  • spring-boot-starter-web : Spring MVC를 사용해서 RESTful 웹 서비스를 개발할 때 필요한 의존성 모음
  • spring-boot-starter-test : 스프링 애플리케이션을 테스트하기 위해 필요한 의존성 모음
  • spring-boot-starter-validation : 유효성 검사를 위해 필요한 의존성 모음
  • spring-boot-starter-actuator : 모니터링을 위해 애플리케이션을 제공하는 다양한 정보를 제공하기 쉽게 하는 의존성 모음
  • spring-boot-starter-data-jpa : ORM을 사용하기 위한 인터페이스 모음인 JPA를 더 쉽게 사용하기 위한 의존성 모음

🚨 ClassNotFoundException

  • 여느때와 같이 build.gradle에 dependency를 설정하고, 간단히 작동하는지 확인하기 위해 main 메서드를 추가해서 실행하는데,
Error: Could not find or load main class me.nahyung.springbootdeveloper.SpringBootDeveloperApplication
Caused by: java.lang.ClassNotFoundException: me.nahyung.springbootdeveloper.SpringBootDeveloperApplication

라고 떴다. Process finished 라고는 떴지만, 에러가 떴다.

캐쉬도 삭제해보고, project를 새로 만들어보기도 했지만, 같은 문제가 지속되었다.

gradle -> dependencies를 보니 build.gradle에 설정한 의존성이 적용되지 않은 것 같아서, 이것 저것 찾아보았다. 그러던 중

[File → Project Structure → Project]
를 들어가보니


위처럼 되어 있었다.

뭐가 문제냐 하면, src 디렉토리가 인텔리제이에서 소스 루트로 인식을 해야하는데, 일반 폴더로 인식하여 클래스 파일을 찾지 못하는 것이였다.

따라서 다음과 같이 source를 누르고,
./gradlew clean build 명령어를 통해 다시 빌드 시켜주었더니
드디어 인텔리제이에서 소스폴더로 인식하고 클래스도 찾을 수 있게 되었다.

"그러나"
개발 인생이 그렇듯, 아직. 해결되지 않았다.

당연히 이 정도 했으면, 해결되었을 줄 알았으나 해결되지 않아 멘붕이였다.
차근차근 다시 찾아보니
[Run -> Edit Configurations...]에서 내가 실행하고 싶은 main을 다시 추가해주어야 했다.

원래는 아래 경로가 없었어서, +를 눌러 내 프로젝트 모듈을 추가해주었다.

"또"
안됐다.

이젠 정말 할 수 있는 것은 다 한 것 같은데
시간도 너무 아까웠다.. 그러나 내가 인텔리제이, spring을 쓰면서 다시는 이러지 않는다는 자신이 없어서 시간이 아까워도 해결하기로 했다..

이것저것 확인해보았을 때, 빌드된 클래스 파일이
build/classes/java/main/me/nahyung/springbootdeveloper/SpringBootDeveloperApplication.class
에 존재했고, 이는 소스-컴파일 자체는 정상적으로 보았다.

그래서 인텔리제이가 실행할 때 잘못된 빌드 아웃풋을 참조하고 있을 것 같아서

./gradlew bootRun

코드를 실행해보기로 했다.

spring 공식문서: Gradle로 애플리케이션 실행

평소에는 스프링 이니셜라이저를 사용했었기 때문에, 아예 인텔리제이에서 new project하여 새 파일로 프로젝트를 만들었을 때 이러한 문제가 생길 수 있다는 것을 알게 되었다.

책에 있는 초기설정을 하니 오류가 많이 생겨
스프링 이니셜라이저를 사용하기로 했다.

해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽

profile
정도를 걷는 엔지니어

0개의 댓글