# 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.javaPrinter.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을 사용하는 경우 추가한 의존성 또한 클래스 패스에 추가된다.