본문 바로가기

Java

Java 컴파일러 javac 옵션 사용하기 - 관련된 소스 및 클래스 파일 위치 지정(-sourcepath, -classpath)

Hello World 예제가 다음과 같이 Hello.java, App.java로 분리되어 있다.


Hello.java
public class Hello {

	public static void hello() {

		System.out.println("Hello World!");
	
	}

}


App.java

public class App {


	public static void main(String[] args) {

		Hello.hello();

	}

}


 App 클래스의 main 메서드에서 Hello 클래스의 hello 메서드를 호출하고 있다.



App 클래스가 Hello 클래스에 의존하고 있으므로, App 클래스를 컴파일하기 위해서는 Hello 클래스에 대한 정보가 필요하다.

먼저 Hello 클래스에 대한 정보없이 App 클래스만 컴파일해보자.



위의 그림과 같이 App 클래스는 "Hello" 라고 표기된 것을 인식할 수 없는 상태이기 때문에 컴파일 시 오류가 발생한다.

따라서 Hello 클래스에 대한 정보를 App 클래스가 알고 있어야 정상적으로 컴파일을 할 수 있다.


App 클래스가 Hello 클래스를 알 수 있는 방법에는 두 가지가 있다.

하나는, 컴파일 시 Hello.java 소스 파일에 대한 정보를 알려주는 방법이고,

다른 하나는 컴파일 시 Hello.class 클래스 파일에 대한 정보를 알려주는 방법이다.


App.java를 컴파일 할 때 Hello.java 파일의 위치를 알고 있으면 Hello.class 파일을 생성시켜 컴파일을 완료할 수 있다.

또는 Hello.java 소스 파일이 없더라도 Hello.class 파일의 위치를 지정하여 클래스 정보를 제공함으로써 컴파일이 완료된다.


관련 소스 파일의 위치를 지정하는 것이 javac의 -sourcepath 옵션이며,

클래스 파일의 위치를 지정하는 것이 -classpath 옵션이다.


javac -sourcepath 옵션 : 관련된 소스 파일의 위치를 지정한다.

Hello.java 파일이 ./src 폴더에 있다고 가정하면,

사용법 : javac -d <클래스 파일 생성 위치> -sourcepath <관련 소스 파일 위치> <소스 파일 위치>

javac -d ./classes -sourcepath ./src ./src/App.java




javac -classpath 옵션 : 관련된 클래스 파일(또는 jar, zip 파일)의 위치를 지정한다.

Hello.class 파일이 ./classes 폴더에 있다고 가정하면,

사용법 : javac -d <클래스 파일 생성 위치> -classpath <관련 클래스 파일 위치> <소스 파일 위치>

javac -d ./classes -classpath ./classes ./src/App.java




결론적으로, 다른 클래스(Hello 클래스)에 의존하는 클래스(App 클래스)의 소스 파일을 컴파일하기 위해서는

다른 클래스 파일(Hello.class)의 위치를 알려주어야 한다고 이해하면 된다.