수업 경로: CLASSPATH는 .class 파일을 찾고 로드하기 위해 Application ClassLoader에서 사용하는 환경 변수입니다. CLASSPATH는 확장이 아니거나 Java 플랫폼의 일부가 아닌 타사 및 사용자 정의 클래스를 찾기 위한 경로를 정의합니다. CLASSPATH를 설정할 때 .class 파일과 JAR 파일이 포함된 모든 디렉터리를 포함합니다.
다음과 같은 경우 CLASSPATH를 설정해야 합니다.
이진 트리 유형
- 현재 디렉터리나 하위 디렉터리에 없는 클래스를 로드해야 합니다.
- 확장 메커니즘에 의해 지정된 위치에 없는 클래스를 로드해야 합니다.
CLASSPATH는 CLASSPATH를 설정하는 대상에 따라 다릅니다. CLASSPATH에는 끝에 디렉터리 이름이나 파일 이름이 있습니다. 다음 사항은 CLASSPATH의 끝이 무엇인지 설명합니다.
- JAR 또는 zip 파일인 경우 파일에 클래스 파일이 포함되어 있으며 CLASSPATH는 zip 또는 JAR 파일 이름으로 끝납니다.
- 클래스 파일이 명명되지 않은 패키지에 배치된 경우 CLASSPATH는 클래스 파일이 포함된 디렉터리로 끝납니다.
- 클래스 파일이 명명된 패키지에 배치된 경우 CLASSPATH는 전체 패키지 이름의 루트 패키지, 즉 전체 패키지 이름의 첫 번째 패키지가 포함된 디렉터리로 끝납니다.
CLASSPATH의 기본값은 점(.)입니다. 검색된 유일한 현재 디렉터리를 의미합니다. CLASSPATH 변수를 설정하거나 -classpath 명령(줄여서 -cp)을 사용하면 CLASSPATH의 기본값이 재정의됩니다. 검색 경로에 현재 디렉터리를 포함하려면 새 설정에 점(.)을 입력하세요.
CLASSPATH가 현재 디렉토리에 있는 클래스 파일을 찾으면 CLASSPATH에도 포함된 다른 디렉토리에 동일한 이름의 클래스가 있는지에 관계없이 클래스를 로드하고 사용합니다.
여러 클래스 경로를 설정하려면 각 CLASSPATH를 세미콜론(;)으로 구분해야 합니다.
JVM을 사용하는 타사 애플리케이션(MySQL 및 Oracle)은 사용하는 라이브러리를 포함하도록 CLASSPATH 환경 변수를 수정할 수 있습니다. 클래스는 디렉토리나 아카이브 파일에 저장될 수 있습니다. Java 플랫폼의 클래스는 rt.jar에 저장됩니다.
CLASSPATH를 설정하는 방법에는 명령 프롬프트를 통하거나 환경 변수를 설정하는 두 가지 방법이 있습니다.
MySQL 데이터베이스의 CLASSPATH를 설정하는 방법을 살펴보겠습니다.
1 단계: Windows 버튼을 클릭하고 제어판을 선택합니다. 시스템을 선택합니다.
2 단계: 클릭 고급 시스템 설정 .
자바 테일
3단계: 대화 상자가 열립니다. 환경 변수를 클릭하세요.
4단계: CLASSPATH가 시스템 변수에 이미 존재하는 경우 편집 버튼을 클릭한 다음 끝에 세미콜론(;)을 입력합니다. MySQL-Connector Java.jar 파일의 경로를 붙여넣습니다.
CLASSPATH가 시스템 변수에 없으면 새로 만들기 버튼을 클릭하고 변수 이름을 CLASSPATH로 입력하고 변수 값을 다음과 같이 입력합니다. C:Program FilesJavajre1.8MySQL-Connector Java.jar;.;
기억하세요: ;.; CLASSPATH 끝에.
PATH와 CLASSPATH의 차이점
길 | 클래스패스 |
---|---|
PATH는 환경 변수입니다. | CLASSPATH도 환경 변수입니다. |
운영 체제에서 실행 파일(.exe)을 찾는 데 사용됩니다. | 이는 .class 파일을 찾기 위해 Application ClassLoader에서 사용됩니다. |
.exe 파일이 포함된 디렉터리를 포함해야 합니다. | .class 및 JAR 파일이 포함된 모든 디렉터리를 포함해야 합니다. |
PATH 환경 변수는 한 번 설정되면 재정의할 수 없습니다. | CLASSPATH 환경 변수는 javac 및 java 명령 모두에 -cp 또는 -CLASSPATH 명령줄 옵션을 사용하여 재정의할 수 있습니다. |
명령 프롬프트를 사용하여 Windows에서 CLASSPATH를 설정하는 방법
명령 프롬프트에 다음 명령을 입력하고 Enter 키를 누릅니다.
set CLASSPATH=%CLASSPATH%;C:Program FilesJavajre1.8 t.jar;
위 명령에서 set은 사용자가 변수 값을 변경할 수 있는 내부 DOS 명령입니다. CLASSPATH는 변수 이름입니다. 백분율 기호(%)로 묶인 변수는 기존 환경 변수입니다. 세미콜론은 구분 기호이며, (;) 뒤에는 rt.jar 파일의 PATH가 있습니다.
C++ 쌍
Java에서 ext 폴더가 작동하는 방식
ext 디렉토리는 CLASSPATH와 약간 유사하게 작동합니다. ext 디렉토리는 클래스 로딩 메커니즘의 일부입니다. ext 디렉토리의 JAR 내에서 사용 가능한 클래스는 Java 애플리케이션에서 사용할 수 있습니다.
다음 표에서는 CLASSPATH와 확장 메커니즘 간의 주요 차이점을 보여줍니다.
형질 | 클래스패스 | 확장 메커니즘 |
---|---|---|
클래스 로딩 순서 | CLASSPATH는 부트스트랩 및 확장 로드 후에 로드됩니다. | ext는 부트스트랩 로딩 후 CLASSPATH 로딩 전에 로드됩니다. |
범위 | 특정 응용 프로그램입니다. 호스트의 모든 JRE는 CLASSPATH 환경 변수입니다. | 모든 JVM은 특정 JRE java.ext.dirs에서 실행됩니다. |
패키지 이름 | java.class.path는 클래스 파일이 포함된 디렉토리와 JAR 아카이브를 찾는 데 사용됩니다. | java.ext.dirs는 확장 메커니즘이 클래스를 로드하는 위치를 지정하는 데 사용됩니다. |
사양 | 이는 .class 파일이 포함된 디렉토리와 확장명.jar을 포함하는 이름으로 지정됩니다. | 지정된 디렉터리의 모든 JAR 파일이 로드됩니다. |
메커니즘은 파일에 .jar 확장자가 없더라도 확장 디렉토리에서 모든 .jar 파일을 선택합니다. 이를 구현하면 클래스 경로 디렉토리에 있는 jar의 이름을 .jar 이외의 확장자를 갖도록 변경할 수 있습니다. 와일드카드(*)는 선택하지 않습니다. 이 기술은 확장 디렉터리에서는 작동하지 않습니다.
예제를 통해 실행과정을 이해해보자.
A.java
public class A { public String toString() { return 'hello'; } }
B.java
public class B { public static void main(final String[] args) { System.out.println(new A()); } }
A.java 파일을 컴파일합니다. 컴파일된 A.class 파일을 A.jar에 보관합니다. 이 JAR 파일을 컴파일된 B.class 파일이 아닌 다른 디렉토리에 배치하십시오.
클래스 경로의 사용을 보여주기 위해 A.jar 파일을 C:JavaPrograms 디렉토리에 배치하고 B가 사용할 와일드카드(*)를 통해 해당 JAR에 액세스합니다.
버블 정렬
우리는 현재 디렉터리에서 A.class를 삭제했지만 B는 여전히 A.class를 로드할 수 있다는 것을 발견했습니다. Java 실행 프로그램은 명시적으로 C:JavaProgram을 찾았습니다. 동일한 디렉토리 및 명시적인 클래스 경로 지정 없이 클래스를 로드하는 것도 가능합니다.
해당 JRE를 사용하는 모든 애플리케이션은 클래스 경로에 명시적으로 지정할 필요 없이 동일한 클래스를 볼 수 있기 때문에 확장 메커니즘 사용의 이점으로 종종 언급됩니다.
동일한 CLASSPATH 참조 디렉토리에서 A.jar의 이름을 A.backup으로 변경하면 어떻게 되나요? CLASSPATH 참조에 .jar 확장자가 없기 때문에 동일한 작업을 수행하면 NoClassDefFoundError가 발생합니다.