IMG-LOGO
공지사항 :

자바 클래스패스(Classpath)

lmkfox - 2025-07-18 06:25:39 17 Views 0 Comment

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 기반


결론

자바 클래스패스는 자바 프로그램이 클래스 파일을 어디서 찾을지 정의하는 경로로, 명확하게 이해하고 설정하지 않으면 실행 오류가 발생할 수 있습니다. 특히 여러 라이브러리를 사용하는 프로젝트에서는 클래스패스를 올바르게 설정하는 것이 매우 중요합니다.


댓글