트러블 슈팅 🥤

🕵️‍♂️ '컴퓨터가 클래스를 못 찾는다' 시리즈

DJDU 2022. 10. 25. 17:58

👨‍💻증상

"클래스패스는 이미 설정된 상황임을 알려드립니다"

~  echo $CLASSPATH
.:/lib/tools.jar:/Users/jiwoo/java_basic/java_basic/bin

 

나는 분명 IDE(IntelliJ)에서 소스파일(AnnotationEx3)을 만들었다.

그리고 파일을 실행시키려고 명령어를 입력했더니 에러 메시지가 뜬다.

 

어쩌라고? 🤷‍♂️

 

이 에러가 발생하면 확장자명을 제거하고 다시 쳐보곤 한다. 내 버릇이다.

 

🎨해석

java.lang.NoClassDefFoundError: ver3/ch12/AnnotationEx3/AnnotationEx3 (wrong name: AnnotationEx3)
 ~/java_basic/java_basic/src/ver3/ch12/AnnotationEx3  java AnnotationEx3     
오류: 기본 클래스 AnnotationEx3을(를) 찾거나 로드할 수 없습니다.
원인: java.lang.NoClassDefFoundError: ver3/ch12/AnnotationEx3/AnnotationEx3 
(wrong name: AnnotationEx3)

"AnnotationEx3는  잘못된 이름입니다." 🙅‍♂️

 

오케이 그러면 확장자를 안 붙여주면 잘못된 거구나.

근데 교재를 보면 안 붙이고 쓰던데 뭐지? 찾아볼까?

 

 

🎨해석

class found on application class path: ver3.ch12.AnnotationEx3.NewClass
 ~/java_basic/java_basic/src/ver3/ch12/AnnotationEx3  java AnnotationEx3.java
error: class found on application class path: ver3.ch12.AnnotationEx3.NewClass

"ver3.ch12.AnnotationEx3.NewClass(어플리키에션 클래스 경로)에서 클래스가 발견됐다. "

 

무슨 말인지 잘 모르겠는데... 

 

근데 또 짜증나는건 IDE에서 실행버튼을 눌러서 실행시키면 또 된다. 🤬

 

👨‍🎨해결 방안

중간에 동일한 이름의 패키지명을 빼먹어서 생긴 에러였다.

~  java ver3.ch12.AnnotationEx3.AnnotationEx3
10

 

java 실행은 되는데, javac 실행은 다음과 같이 나타면서 되지 않는다.

 

~/java_basic/java_basic/src/ch08   main ±✚  java Ex8_10.java test2.txt
test2.txt파일이 성공적으로 생성되었습니다.

~/java_basic/java_basic/src/ch08   main ±✚  java Ex8_10 test2.txt     
오류: 기본 클래스 Ex8_10을(를) 찾거나 로드할 수 없습니다.
원인: java.lang.ClassNotFoundException: Ex8_10

 

클래스패스가 bin으로 설정되어 있어서 그런 것 같다.

~  echo $CLASSPATH
.:/lib/tools.jar:/Users/jiwoo/java_basic/java_basic/bin

~  javac ver3.ch12.AnnotationEx3.annotationEx3.java 
error: file not found: ver3.ch12.AnnotationEx3.annotationEx3.java
Usage: javac <options> <source files>
use --help for a list of possible options

즉, 자바 실행은 클래스파일을 사용하기 때문에 classpath가 활용되지만, 자바 컴파일은 src폴더에서 진행되므로 되지 않는 것이었다.

그렇다면, 클래스패스를 사용해서 javac 명령어 실행도 할 수 있진 않을까?