답변:
Java로 프로그래밍 할 때 소스 파일의 맨 위에 다음과 같은 것을 넣어서 작성중인 클래스에서 다른 클래스를 사용할 수있게합니다.
import org.javaguy.coolframework.MyClass;
또는 때로는 다음과 같이 말하여 가져 오기를 '대량 가져 오기'합니다.
import org.javaguy.coolframework.*;
따라서 프로그램에서 나중에 말할 때 :
MyClass mine = new MyClass();
Java Virtual Machine은 컴파일 된 클래스를 찾을 위치를 알고 있습니다.
VM이 컴퓨터의 모든 폴더를 살펴 보도록하는 것은 실용적이지 않으므로 VM에 찾을 장소 목록을 제공해야합니다. 이것은 클래스 경로에 폴더 및 jar 파일을 넣어 수행됩니다.
클래스 경로 설정 방법에 대해 설명하기 전에 .class 파일, 패키지 및 .jar 파일에 대해 이야기 해 봅시다.
먼저 MyClass가 프로젝트의 일부로 빌드 한 것으로 가정하고 프로젝트의 디렉토리에 있습니다 output
. .class 파일은 output/org/javaguy/coolframework/MyClass.class
해당 패키지의 다른 모든 파일과 함께 있습니다. 해당 파일에 접근하려면 import 문은 모든 정보를 VM에 제공하기 때문에 전체 패키지 구조가 아니라 'output'폴더를 포함해야합니다.
이제 CoolFramework를 .jar 파일로 묶고 해당 CoolFramework.jar를 프로젝트의 lib 디렉토리에 넣었다고 가정 해 봅시다. 이제 lib/CoolFramework.jar
클래스 경로 에 넣어야 합니다. VM은 jar 파일 내부에서 해당 org/javaguy/coolframework
부분을 찾고 클래스를 찾습니다.
따라서 클래스 경로에는 다음이 포함됩니다.
클래스 패스를 어떻게 설정합니까?
모두가 배우는 첫 번째 방법은 환경 변수를 사용하는 것입니다. 유닉스 머신에서는 다음과 같이 말할 수 있습니다.
export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/
Windows 시스템에서는 환경 설정으로 이동하여 이미 존재하는 값을 추가하거나 수정해야합니다.
두 번째 방법은 -cp
다음과 같이 Java를 시작할 때 매개 변수 를 사용하는 것입니다.
java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/" MyMainClass
이것의 변형은 클래스 경로를 계산하고 매개 변수 를 통해 Java로 전달 하는 .sh
또는 .bat
파일로 종종 수행되는 세 번째 방법입니다 -cp
.
위의 모든 "gotcha"가 있습니다. 대부분의 시스템 (Linux, Mac OS, UNIX 등)에서 콜론 문자 ( ':')는 클래스 경로 구분 기호입니다. windowsm에서 구분 기호는 세미콜론 ( ';')입니다.
가장 좋은 방법은 무엇입니까?
환경 변수를 통해 전역으로 물건을 설정하는 것은 일반적으로 전역 변수가 나쁜 것과 같은 이유로 나쁜 것입니다. 한 프로그램이 작동하도록 CLASSPATH 환경 변수를 변경하면 다른 프로그램이 중단됩니다.
-cp가가는 길입니다. 나는 일반적으로 CLASSPATH 환경 변수가 가능한 한 항상 개발되는 빈 문자열인지 확인하여 전역 클래스 경로 문제를 피합니다 (글로벌 클래스 경로가 비어있을 때 일부 도구는 행복하지 않습니다. 명령 줄 도구와 관련하여 이러한 종류의 문제가있는 달러 라이센스 J2EE 및 Java 서버).
org.javaguy.coolfw
해당 디렉토리 구조 /path/to/org/javaguy/coolfw/
로 클래스 경로를 포함해야합니다 /path/to/
. org.javaguy.hotfw
같은 프로젝트에 새 패키지 를 추가 하면 결과 클래스는 (일반적으로)로 끝납니다 /path/to/org/javaguy/hotfw/
. 이를 위해서는 클래스 경로에 /path/to/
이미 포함되어 있어야합니다 . 따라서 새로운 패키지 (및 그 안에 포함 된 클래스)는 클래스 경로에 새로운 추가를 요구하지 않습니다.
CLASSPATH 시스템 변수 설정
현재 CLASSPATH 변수를 표시하려면 Windows 및 UNIX (Bourne 쉘)에서 다음 명령을 사용하십시오. Windows : C:\> set CLASSPATH
UNIX : % echo $CLASSPATH
CLASSPATH 변수의 현재 내용을 삭제하려면 다음 명령을 사용하십시오. Windows : C:\> set CLASSPATH=
UNIX : % unset CLASSPATH; export CLASSPATH
CLASSPATH 변수를 설정하려면 다음 명령을 사용하십시오 (예 :) Windows : C:\> set CLASSPATH=C:\users\george\java\classes
UNIX : % CLASSPATH=/home/george/java/classes; export CLASSPATH
CLASSPATH는 Java 컴파일러 및 런타임에서 Java 프로그램에 사용 된 Java 패키지를 찾는 데 필요한 환경 변수 (즉, 모든 프로세스에서 사용 가능한 운영 체제의 전역 변수)입니다. (PACKAGEPATH를 호출하지 않는 이유는 무엇입니까?) 이것은 다른 환경 변수 PATH와 유사합니다.이 변수는 CMD 쉘에서 실행 프로그램을 찾기 위해 사용합니다.
CLASSPATH는 다음 방법 중 하나로 설정 될 수 있습니다.
CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH.
To check the current setting of the CLASSPATH, issue the following command:
> SET CLASSPATH
CLASSPATH can be set temporarily for that particular CMD shell session by issuing the following command:
> SET CLASSPATH=.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar
Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example,
> java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3
객체 인스턴스를 만들지 않고 클래스의 정적 멤버를 직접 호출 할 수 있습니다. 기본 메소드는 정적 Java 가상 머신이므로 프로그램의 시작점 인 기본 메소드를 포함하는 클래스의 인스턴스를 작성하지 않고 호출 할 수 있습니다.
리눅스 사용자와 다른 사람들이 여기에 말한 것을 요약하고 추가하려면 다음을 알아야합니다.
$ CLASSPATH는 Java가 여러 디렉토리를 조사하여 스크립트에 필요한 모든 다른 클래스를 찾기 위해 사용하는 것입니다 (명시 적으로 -cp 재정의를 사용하여 명시하지 않는 한). -cp를 사용하려면 모든 디렉토리를 수동으로 추적하고 프로그램을 실행할 때마다 해당 행을 복사하여 붙여 넣어야합니다 (바람직한 IMO는 아님).
콜론 ( ":") 문자는 다른 디렉토리를 구분합니다. $ CLASSPATH는 하나 뿐이며 모든 디렉토리가 있습니다. 따라서 "export CLASSPATH = ...."를 실행할 때 현재 값 "$ CLASSPATH"를 추가하여 추가하려고합니다. 예를 들면 다음과 같습니다.
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
위의 첫 번째 줄에서, 현재 작업 디렉토리의 경로 인 간단한 '점'으로 CLASSPATH를 시작하십시오. 이를 통해 Java를 실행할 때마다 현재 작업 디렉토리 (현재있는 디렉토리)에서 클래스를 찾습니다. 위의 두 번째 줄에서 $ CLASSPATH는 이전에 입력 한 값 (.)을 잡고 mysql 디렉토리에 경로를 추가합니다. 이제 java는 드라이버와 클래스를 찾습니다.
echo $CLASSPATH
매우 편리하며 반환되는 것은 모든 디렉토리와 .jar 파일의 콜론으로 구분 된 목록과 같이 읽어야합니다 .Java는 필요한 클래스를 찾고 싶습니다.
Tomcat은 CLASSPATH를 사용하지 않습니다. https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html에서 이에 대해 수행 할 작업을 읽으십시오.