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