Java

클래스패스 Class path 란?

구티맨 2020. 8. 13. 15:20

클래스패스란, JVM이나 Java 컴파일러에 사용자정의 클래스와 패키지의 위치를 지정해주는 파라메터 이다.

쉽게 말해, 자바가 클래스를 찾아 사용을 해야하는데 클래스들이 어디 있는지 위치를 지정해주는 값이다.

아래의 MyClass.java 파일을 컴파일 해서, 실행을 해보자.

/Users/charlieshin/javatest/MyClass.java

public class MyClass{
  public static void main(String[] args){
        System.out.println("Happy Coding!");
    }
}

java 파일을 컴파일 하고, MyClass 를 수행해주면 된다.

javatest $ javac MyClass.java

javatest $ ls
MyClass.class MyClass.java

javatest $ java MyClass
Happy Coding!

위의 명령줄은 javatest 폴더, 즉 class가 있는 위치에서 해당 클래스를 실행하는 명령어를 입력을 하였기 떄문에 클래스패스를 별도 지정하지 않아도 되었다.

하지만 다른 경로에서 실행을 한다면, 실행할 클래스의 위치.. 즉, 클래스패스를 명시해주어야 해당 위치에서 클래스를 찾아 실행할 수 있다.

홈폴더에서 해당 클래스를 실행시 아래와 같이 실행 할 수 있다.

#!/bin/bash

CLASSPATH=/Users/charlieshin/javatest

java MyClass

위와 같은 쉘 파일을 홈폴더에 생성하고, 아래와 같이 실행을 해주면, 쉘에서 지정된 클래스패스에서 MyClass를 찾아 실행을 하게 된다.

~ $ ./myclass.sh
Happy Coding!

이젠 패키지에 대해 알아보자.

자바 프로그램을 개발하면 import 를 이용하여, 다른 패키지를 포함시켜 개발을 한다.

그리고, 개발자가 개발하는 코드들도 패키지에 클래스를 생성하여 개발을 하게 된다.

아래와 같이 이전에 보았던 클래스에 패키지를 선언해주자.

package com.mine;

public class MyClass{
  public static void main(String[] args){
        System.out.println("Happy Coding!");
    }
}

아래와 같이, 현재 폴더에 클래스를 컴파일하고 결과물은 /Users/charlieshin/javatest/com/mine 폴더에 클래스가 만들어지게 된다.

그리고, 패키지명 + 클래스 이름으로 프로그램을 실행을 할 수 있다.

javatest $ javac -d . MyClass.java

~ $ export CLASSPATH=/Users/charlieshin/javatest

~ $ java com.mine.MyClass
Happy Coding!

java 클래스 생성시, jar 파일에 포함하여 생성할 수도 있는데, 아래 코드와 같이 jar를 생성하고
해당 jar의 위치를 클래스패스에 지정하면, 홈 위치에서 해당 클래스를 실행해도 클래스패스 위치에서 해당 클래스를 찾아 실행을 하게 된다.

javatest $ jar -cvf my.jar com/mine/*.class
added manifest
adding: com/mine/MyClass.class(in = 430) (out= 297)(deflated 30%)

javatest $ ls -alh
total 16
drwxr-xr-x    5 charlieshin  staff   160B  8 13 14:36 .
drwxr-xr-x+ 174 charlieshin  staff   5.4K  8 13 14:36 ..
-rw-r--r--    1 charlieshin  staff   127B  8 13 13:50 MyClass.java
drwxr-xr-x    3 charlieshin  staff    96B  8 13 13:51 com
-rw-r--r--    1 charlieshin  staff   771B  8 13 14:36 my.jar

javatest $ export CLASSPATH=/Users/charlieshin/javatest/my.jar
javatest $ echo $CLASSPATH
/Users/charlieshin/javatest/my.jar

~ $ java com.mine.MyClass
Happy Coding!