[JAVA] 클래스 패스

Coastby·2022년 8월 4일
0

JAVA

목록 보기
14/33

클래스 패스

클래스가 위치하는 경로를 지정해서 자바가 필요로 하는 클래스를 로드할 수 있는 방법.

○ terminal 이용하여 class 파일 생성하고 확인하기

1. ClassPathDemo 폴더안에 ClassPath 라는 java 파일을 만들어준다.

package ClassPathDemo;

class Item {}

class ClassPathDemo{}

public class ClassPath {

	public static void main(String[] args) {
	}
}

2. terminal 을 이용하여 java 파일이 있는 폴더로 들어간다.

👉 맥북에서 파일/폴더 경로 따기
1) option키 + 우클릭 - ‘’의 경로이름 복사 클릭
2) terminal에 해당 파일/폴더 drag & drop
3) textEdit에 해당 파일/폴더 drag & drop
4) finder의 경로 막대에서 우클릭 - ‘’의 경로이름 복사 클릭

joyejiui-MacBook-Pro:~ yj$ cd /Users/yj/eclipse-workspace/java_tutorials/src/ClassPathDemo
joyejiui-MacBook-Pro:ClassPathDemo yj$ ls -al
total 8
drwxr-xr-x  3 yj  staff   96  8  2 17:12 .
drwxr-xr-x  6 yj  staff  192  8  2 17:12 ..
-rw-r--r--  1 yj  staff  174  8  2 17:13 ClassPath.java

3. 자바파일 컴파일

javac : java 파일을 compile 하여 class 파일로 만든다

joyejiui-MacBook-Pro:ClassPathDemo yj$ javac ClassPath.java

4. 폴더 확인해보기

class 파일이 생성되어 있는 것을 확인할 수 있다.
joyejiui-MacBook-Pro:ClassPathDemo yj$ ls -al
total 32
drwxr-xr-x  6 yj  staff  192  8  2 17:25 .
drwxr-xr-x  6 yj  staff  192  8  2 17:12 ..
-rw-r--r--  1 yj  staff  277  8  2 17:25 ClassPath.class
-rw-r--r--  1 yj  staff  174  8  2 17:13 ClassPath.java
-rw-r--r--  1 yj  staff  210  8  2 17:25 ClassPathDemo.class
-rw-r--r--  1 yj  staff  201  8  2 17:25 Item.class

○ 자바파일 실행해보기

1. 자바 파일 만들기

class Item3 {
	public void printout() {
		System.out.println ("Hello World!");
	}
}


public class ClassPath3 {

	public static void main(String[] args) {
		Item3 i1 = new Item3 ();
		i1.printout();

	}

}

2. 위의 방법대로 컴파일 후 실행해보기

컴파일 : javac 자바파일이름.java
실행 : java 자바파일이름

java compile 오류가 났다

joyejiui-MacBook-Pro:ClassPathDemo yj$ javac ClassPath3
error: Class names, 'ClassPath3', are only accepted if annotation processing is explicitly requested
1 error

찾아보니 java 파일명.java로 자바 확장자를 붙여줘야하는데 안 붙여줬다.

실행이 안 된다
오류 : java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException

joyejiui-MacBook-Pro:ClassPathDemo yj$ java ClassPath2
Error: Could not find or load main class ClassPath2
Caused by: java.lang.NoClassDefFoundError: ClassPathDemo/ClassPath2 (wrong name: ClassPath2)
joyejiui-MacBook-Pro:ClassPathDemo yj$ java ClassPathDemo.ClassPath2
Error: Could not find or load main class ClassPathDemo.ClassPath2
Caused by: java.lang.ClassNotFoundException: ClassPathDemo.ClassPath2
joyejiui-MacBook-Pro:ClassPathDemo yj$ java ClassPath2.java
error: can't find main(String[]) method in class: ClassPathDemo.Item2

해결법)

3. 성공

joyejiui-MacBook-Pro:ClassPathDemo yj$ javac ClassPath3.java
joyejiui-MacBook-Pro:ClassPathDemo yj$ java ClassPath3
Hello World!

○ 클래스패스 지정

클래스가 같은 폴더가 아니라 다른 폴더에 있다면 클래스의 디렉토리를 지정해 줄 필요가 있다.

Item3.classlib 폴더 안에 넣고 ClassPath3 를 실행시키면 오류가 난다.

joyejiui-MacBook-Pro:ClassPathDemo yj$ java ClassPath3
Exception in thread "main" java.lang.NoClassDefFoundError: Item3
	at ClassPath3.main(ClassPath3.java:11)
Caused by: java.lang.ClassNotFoundException: Item3
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 1 more

classpath를 지정해주면 정상 작동한다.

joyejiui-MacBook-Pro:ClassPathDemo yj$ java -classpath ".:lib" ClassPath3
Hello World!

-classpath ".:lib" : 자바를 실행할 때 사용할 클래스들의 위치를 가상머신에게 알려주는 역할을 한다. .은 현재 디렉토리 내에서 클래스를 찾는다는 뜻이다. : 는 경로와 경로를 구분해주는 구분자이다. lib 현재 디렉토리에 없다면 하위 디렉토리 중 이 폴더에서 클래스를 찾는다는 의미이다.

(처음에 영상보고 세미콜론으로 따라해서 오류남)

○ 환경변수

다른사람이 만든 클래스를 자신이 만들고 있는 클래스로 가져오기 위해서 경로를 지정할 필요가 있다. 여러 로직이 같은 클래스를 쓴다면 이를 쓰기 위해 경로를 지정할 필요가 있다.

그리고 자바를 실행할 대마다 클래스패스를 지정하는 것은 번거롭다. 이때 환경변수를 사용한다.

운영체제에 설정하는 것이고 어디에 있던 간에 사용할 수 있기 때문에 약속된 변수를 지정하면 된다.

환경변수를 전체경로로 지정한다.

다른 컴퓨터에는 환경변수가 설정이 안 되어 있기 때문에 실행이 안 될 수 있다.

shell, bash 등 스크립트에서 환경변수를 지정해놓은 실행파일을 별도로 만들어서 실행하는 경우도 있다.

profile
훈이야 화이팅

0개의 댓글