클래스패스는 자바 프로그램이 **클래스 파일(.class)**이나 **라이브러리(JAR 파일)**를 어디서 로드할지 알려주는 경로입니다.
컴파일 시(javac)와 실행 시(java) 모두 클래스패스를 사용합니다.
클래스패스를 지정하지 않으면, 자바는 **현재 작업 디렉토리(.)**를 기본 클래스패스로 사용합니다.
java MyClass
위 명령은 현재 폴더(.)에서 MyClass.class를 찾습니다.
java -classpath .;lib/mylib.jar com.example.MyClass
Windows는 경로 구분자로 ; 사용
macOS/Linux는 : 사용
java -cp .:lib/mylib.jar com.example.MyClass
export CLASSPATH=.:/usr/local/java/lib
단, 명령어로 지정한 클래스패스가 환경 변수보다 우선합니다.
클래스패스에 지정할 수 있는 항목:
디렉토리: .class 파일이 들어 있는 디렉토리
JAR 파일: 라이브러리로 제공되는 .jar 파일
와일드카드: JAR 파일들을 한꺼번에 포함 가능
java -cp ".:lib/*" com.example.Main
위 예시는 lib 디렉토리 안의 모든 JAR 파일을 포함
project/
├── com/
│ └── example/
│ └── Hello.java
javac com/example/Hello.java
java -cp . com.example.Hello
ClassNotFoundException 또는 NoClassDefFoundError 발생
주로 다음 상황에서 오류 발생
경로 지정 실수
JAR 파일 누락
클래스의 패키지 경로와 실제 위치 불일치
IntelliJ, Eclipse 등의 IDE는 프로젝트 설정에서 자동으로 클래스패스를 관리합니다.
하지만 빌드 도구(Maven, Gradle)를 사용하면 classpath는 dependencies로 명시적으로 관리됩니다.
명령어 |
설명 |
---|---|
-cp 또는 -classpath |
클래스패스를 지정 |
java |
클래스 실행 |
javac |
클래스 컴파일 |
echo $CLASSPATH |
환경 변수 클래스패스 확인 |
java -verbose:class |
로딩되는 클래스 정보 출력 |
Java 9부터는 모듈 시스템이 도입되어 --module-path를 사용하는 경우도 있음
그러나 대부분의 기존 애플리케이션과 라이브러리는 여전히 classpath 기반
자바 클래스패스는 자바 프로그램이 클래스 파일을 어디서 찾을지 정의하는 경로로, 명확하게 이해하고 설정하지 않으면 실행 오류가 발생할 수 있습니다. 특히 여러 라이브러리를 사용하는 프로젝트에서는 클래스패스를 올바르게 설정하는 것이 매우 중요합니다.