자바를 CLI 환경에서 실행할 때 참조하는 classpath를 직접 지정하려면 -classpath 옵션을 사용한다. classpath를 지정하지 않으면 기본적으로는 명령을 실행하는 디렉토리에서 클래스를 찾는다.
1. 윈도우 cmd에서 사용
윈도우에선 ; 구분자를 사용해서 여러 경로를 입력할 수 있다.
java -classpath <경로1>;<경로2>;... <메인클래스>
단일 경로 지정
물론 단일 경로만 입력해도 된다. 이땐 ; 구분자를 쓰지 않아도 된다.
C:\workspace\java>java -classpath . HelloWorld
Hello, World!
복수 경로 지정
C:\workspace\java>java -classpath .;C:\workspace\java; HelloWorld
Hello, World!
2. 리눅스 쉘에서 사용
리눅스에서도 사용 방법은 동일하고 classpath 경로를 여러 개 지정할 때 : 를 사용하는 점이 다르다.
java -classpath <경로1>:<경로2>:... <메인클래스>
3. jar 파일을 classpath 잡을 때
주의할 점은 classpath를 폴더 경로로 지정하면 해당 폴더 안에 있는 jar는 참조하지 않는다는 것이다. jar 파일을 classpath에 포함시키려면 jar의 full path를 지정해야 한다.
java -classpath ./lib/some-library.jar <클래스명>
만약 해당 경로에 있는 모든 jar를 참조하려면 * 를 사용한다.
java -classpath .:./* <클래스명>
classpath란?
classpath는 java에서 클래스와 리소스 파일을 찾기 위한 경로를 지정하는 개념이다. java 애플리케이션을 실행할 때 JVM은 필요한 class 파일, jar 파일 같은 라이브러리를 찾기 위해 classpath를 사용한다.
외부 라이브러리를 사용하는데 실행이 안 되면 해당 라이브러리가 있는 위치를 classpath에 잡아주지 않은 게 원인인 경우가 많다.