수업길
ClasspathClasspath는 Java Virtual Machine 또는 Java 컴파일러에서 사용자 정의 클래스 및 패키지의 위치를 지정하는 매개 변수다.매개변수는 명령줄 또는 환경 변수를 통해 설정할 수 있다.
개요 및 아키텍처
전통적인 동적 로드 동작과 마찬가지로 Java 프로그램을 실행할 때 Java Virtual Machine은 클래스를 느리게 찾아서 로드한다(클래스가 처음 사용될 때만 클래스의 바이트 코드를 로드함).클래스 경로는 파일 시스템에서 이러한 클래스를 정의하는 파일을 찾을 위치를 Java에 알려준다.
가상 시스템은 다음 순서로 클래스를 검색하고 로드하며,
- 부트스트랩 클래스: Java 플랫폼의 기본 클래스(Java 클래스 라이브러리의 공용 클래스 및 이 라이브러리가 기능하는 데 필요한 개인 클래스)
- 확장 클래스: JRE 또는 JDK의 확장 디렉터리에 있는 패키지,
jre/lib/ext/ - 사용자 정의 패키지 및 라이브러리
기본적으로 JDK 표준 API 및 확장 패키지의 패키지만 찾을 위치를 설정하지 않고도 액세스할 수 있다.모든 사용자 정의 패키지 및 라이브러리의 경로는 명령줄(또는 클래스를 포함하는 Jar 파일과 연결된 매니페스트)에서 설정해야 한다.
Java 프로그램 실행 경로 설정
응용 프로그램 인수로 공급
org.mypackage라는 패키지에 클래스가 포함되어 있다고 가정해 보십시오.
- 헬로월드(메인클래스)
- 서포트클래스
- UtilClass
그리고 이 패키지를 정의하는 파일은 D:\myprogram (Windows) 또는 /home/user/myprogram (Linux) 디렉토리에 물리적으로 저장된다.
파일 구조는 다음과 같다.
| 마이크로소프트 윈도 | 리눅스 |
|---|---|
D:\myprogram\ ---> org\ -> mypackage\ ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class.class.class.class.class.class.c | /home/user/myprogram/ ---> org/ ---> mypackage/ --> HelloWorld.class ---> SupportClass.class ---> UtilClass.class.class.class.class.class |
Java를 호출할 때 실행할 응용 프로그램의 이름을 org.mypackage로 지정하십시오.안녕 세계그러나 우리는 또한 Java에게 우리의 패키지를 정의하는 파일들과 디렉토리들을 어디에서 찾아야 하는지 알려야 한다.그래서 프로그램을 실행하기 위해 다음 명령을 사용한다.
| 마이크로소프트 윈도 | 리눅스 |
|---|---|
Java -classpath D:\myprogram org.mypackage.안녕 세계 | Java -cp /home/user/myprogram organ.mypackage.안녕 세계 |
여기서:
javaSDK 툴의 일종인 Java 런타임 런처(javac, javadoc 또는 apt와 같은 명령줄 도구)- -classpath D:\myprogram은 프로그램에 사용되는 패키지의 경로를 설정한다(Linux, -cp /home/user/myprogram에서).
- 조직.마이패키지HelloWorld는 메인 클래스의 이름이다.
환경 변수를 통한 경로 설정
이름이 지정된 환경 변수CLASSPATH다른 방법으로 클래스 경로를 설정할 수 있다.위의 예에서 Windows에서도 사용할 수 있다.
CLASSPATH=D:\myprogram Java org.mypackage를 설정하십시오.안녕 세계라는 것이 원칙이다.-classpath옵션, Java 응용 프로그램을 시작하는 데 사용할 경우 재정의CLASSPATH환경 변수지정되지 않은 경우 현재 작업 디렉터리가 클래스 경로로 사용된다.이것은 우리의 작업 디렉토리가D:\myprogram\(Linux에서는,/home/user/myprogram/), 클래스 경로를 명시적으로 지정할 필요는 없다.그러나 재정의할 때는 현재 폴더를 포함하는 것이 좋다."."현재 폴더에서 클래스를 로드하려는 경우 클래스 경로로 이동하십시오.
자바 발사기뿐 아니라 자바 컴파일러인 자바(javac)도 마찬가지다.
Jar 파일의 경로 설정
프로그램이 supportLib.jar라는 Jar 파일에 동봉된 지원 라이브러리를 사용하는 경우, 실제로 디렉터리 D:\myprogram\lib\에 위치하며 해당 물리적 파일 구조는 다음과 같다.
D:\myProgram\ ---> lib\ ---> supportLib.jar ---> org\ --> mypackage\ --->헬로월드.class ---> SupportClass.class ---> UtilClass.class.class.class.class.class.class.class.
다음 명령줄 옵션이 필요함:
Java -classpath D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.안녕 세계
또는 다음 중 하나:
CLASSPATH=D:\my 프로그램 설정;D:\myprogram\lib\supportLib.jar java org.mypackage.안녕 세계
디렉토리에 모든 JAR 파일 추가
자바 6 이상에서는 와일드카드 표기법을 사용하여 특정 디렉토리의 모든 jar 파일을 클래스 경로에 추가할 수 있다.
Windows 예:
java -classpath ".;c:\mylib\*" MyApp
Linux 예제:
java -classpath 'acrob/mylib/*' MyApp
이것은 양쪽 모두에게 효과가 있다.-classpath옵션 및 환경 클래스 경로.
매니페스트 파일의 경로 설정
프로그램이 디렉토리 D:\my프로그램에 직접 위치한 helloWorld.jar라는 Jar 파일에 동봉된 경우 디렉토리 구조는 다음과 같다.
D:\myprogram\ ---> helloWorld.jar ---> lib\ ---> supportLib.jar
helloWorld.jar에 정의된 매니페스트 파일에는 다음과 같은 정의가 있다.
메인 클래스: org.mypackage.HelloWorld Class-Path: lib/supportLib.jar
매니페스트 파일은 새 회선 또는 캐리지 리턴으로 끝나야 한다.
프로그램은 다음 명령으로 실행된다.
java -jar D:\myprogram\helloWorld.jar [app 인수]
이것은 자동으로 org.mypackage를 시작한다.HelloWorld는 인수를 사용하여 클래스 Main-Class에 지정되었다.사용자는 호출을 사용하여 이 클래스 이름을 바꿀 수 없음java -jar. Class-Path는 helloWorld.jar 라이브러리의 위치와 관련된 supportLib.jar의 위치를 설명한다.다음에서 허용되지 않는 절대 파일 경로 없음-classpath명령줄의 매개 변수 또는 jar-internal 경로는 지원되지 않음.이것은 메인 클래스 파일이 항아리에 들어 있는 경우, org/mypackage/HelloWorld.class가 항아리의 루트에 유효한 경로여야 함을 의미한다.
다중 클래스 경로 항목은 공백으로 구분:
클래스 경로: lib/supportLib.jar lib/supportLib2.jar
OS별 참고 사항
파일 시스템과 밀접하게 연관되어 있기 때문에 명령줄 Classpath 구문은 운영 체제에 따라 달라진다.[1]예를 들면 다음과 같다.
- 모든 Unix 유사 운영 체제(예: Linux 및 Mac OS X)에서 디렉토리 구조는 Unix 구문을 가지며 별도의 파일 경로를 콜론(":")으로 구분한다.
- 윈도우즈에서 디렉토리 구조는 윈도우즈 구문을 가지며, 각 파일 경로는 세미콜론(";")으로 구분되어야 한다.
클래스 경로가 매니페스트 파일에 정의되어 있는 경우, 운영 체제에 관계없이 각 파일 경로를 공백(" ")으로 구분해야 하는 경우에는 적용되지 않는다.
참고 항목
참조
- ^ "The Classpath". Retrieved 2016-06-26.