# Table of Contents
# 클래스패스
클래스패스(classpath)는 클래스를 찾기 위한 경로다. 간단한 예제를 통해 클래스패스에 대해 알아보자.
# 예제 1
첫 번째 예제의 프로젝트 구조는 다음과 같다.
$ pwd
/yologger/workspace/project
$ tree
.
└── Main.java
// Main.java
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
다음과 같이 Main.java가 위치하는 경로에서는 이 파일을 컴파일하고 실행할 수 있다. 이는 JVM이 현재 위치를 클래스 파일로 인식하기 때문이다.
$ pwd
/yologger/workspace/project
$ javac Main.java
$ java Main
Hello World
그렇다면 /yologger/workspace로 이동하여 똑같은 명령어를 실행하면 어떻게 될까?
$ cd ..
$ pwd
/yologger/workspace
$ java Main
다음과 같은 에러가 발생할 것이다. Main.class 바이트코드의 위치를 찾지 못했기 때문이다.
Error: Could not find or load main class Main
Caused by: java.lang.ClassNotFoundException: Main
이제 클래스패스를 통해 Main.class의 경로를 알려주자. -classpath 또는 -cp 옵션을 사용하면 된다.
$ java -classpath "./project" Main
Hello World
# 예제 2
이제 lib폴더에 Printer클래스를 추가하고 Main.java 코드를 다음과 같이 수정해보자.
// Printer
class Printer {
public void print(String something) {
System.out.println(something);
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Printer printer = new Printer();
printer.print("Hello World");
}
}
프로젝트 구조는 다음과 같다.
$ pwd
/yologger/workspace/project
$ tree
.
├── Main.java
└── lib
└── Printer.java
Main.java는 Printer.java를 참조하고 있다. 따라서 Main.java를 컴파일할 때 Priner.java의 클래스패스를 알려주어야 한다.
$ javac -classpath ./lib Main.java
컴파일을 하면 Main.class, Printer.class가 생성된다.
$ tree
.
├── Main.class
├── Main.java
└── lib
├── Printer.class
├── Printer.java
└── gson-2.8.0.jar
이제 Main.class를 실행해보자. 실행할 때 역시 Printer.class의 경로를 알려주어야 한다.
java -classpath .:./lib Main
# 예제 3
jar파일을 클래스패스에 추가하는 방법을 알아보자.
lib 폴더에 jar 파일을 추가한다.
$ tree
.
├── Main.java
└── lib
└── gson-2.8.0.jar
그리고 Main.java에서 jar에 의존하도록 수정한다.
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
}
}
컴파일 할 때 jar 파일의 경로를 클래스패스 옵션으로 알려주어야 한다.
$ javac -classpath "./lib/gson-2.8.0.jar" Main.java
실행할 때도 jar 파일의 경로를 알려주어야 한다.
$ java -classpath ".:./lib/gson-2.8.0.jar" Main
# Spring Boot와 클래스패스
IntelliJ로 생성한 스프링 부트 프로젝트의 클래스 패스는 IntelliJ > File > Project Structure에서 확인할 수 있다.

테스트 환경을 위한 클래스 패스는 다음과 같이 확인할 수 있다.

Gradle 또는 Maven을 사용하는 경우 추가한 의존성 또한 클래스 패스에 추가된다.
