Programing

클래스 패스 란 무엇이며 어떻게 설정합니까?

lottogame 2020. 3. 15. 09:32
반응형

클래스 패스 란 무엇이며 어떻게 설정합니까?


나는이 줄을 읽고 있었다.

format () 메서드가하는 첫 번째 작업은 output.vm이라는 클래스 경로에서 Velocity 템플릿을로드하는 것입니다.

이 문맥에서 classpath의 의미와 클래스 경로를 설정하는 방법을 설명하십시오.


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부분을 ​​찾고 클래스를 찾습니다.

따라서 클래스 경로에는 다음이 포함됩니다.

  • JAR 파일
  • 패키지 계층의 최상위 경로.

클래스 패스를 어떻게 설정합니까?

모두가 배우는 첫 번째 방법은 환경 변수를 사용하는 것입니다. 유닉스 머신에서는 다음과 같이 말할 수 있습니다.

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 서버).


PATH 환경 변수에 대한 Java의 대답으로 생각하십시오. OS는 PATH에서 EXE를 검색하고 Java는 클래스 경로에서 클래스 및 패키지를 검색합니다.


클래스 경로는 Java Virtual Machine이 Java 프로그램에서 사용자 정의 클래스, 패키지 및 리소스를 찾는 경로입니다.

이 컨텍스트에서 format()메소드는이 경로에서 템플리트 파일을로드합니다.


이 컨텍스트의 클래스 경로는 일반적인 컨텍스트에서와 정확히 같습니다. VM이로드 할 클래스를 찾을 수있는 모든 위치와 리소스 (예 : output.vm)가 있습니다.

Velocity는 "no package"의 어디에서나 output.vm이라는 파일을 찾을 것으로 예상합니다. 이것은 JAR, 일반 폴더 일 수 있습니다. ... 응용 프로그램의 클래스 경로에있는 모든 위치의 루트입니다.


CLASSPATH 시스템 변수 설정

현재 CLASSPATH 변수를 표시하려면 Windows 및 UNIX (Bourne 쉘)에서 다음 명령을 사용하십시오. Windows : C:\> set CLASSPATHUNIX :% echo $CLASSPATH

CLASSPATH 변수의 현재 내용을 삭제하려면 다음 명령을 사용하십시오. Windows : C:\> set CLASSPATH=UNIX :% unset CLASSPATH; export CLASSPATH

CLASSPATH 변수를 설정하려면 다음 명령을 사용하십시오 (예 :) Windows : C:\> set CLASSPATH=C:\users\george\java\classesUNIX :% CLASSPATH=/home/george/java/classes; export CLASSPATH


클래스 경로는 시스템의 환경 변수입니다. 이 변수의 설정은 모든 패키지 계층의 루트를 Java 컴파일러에 제공하는 데 사용됩니다.


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

Environment variable 운영 체제 (OS)에서 실행중인 모든 프로세스가 액세스 할 수있는 글로벌 시스템 변수입니다.

classpathJava에서는 environment variableJava Virtual Machine이 .class클래스로드 중에 Java에서 클래스 파일 ( ) 을 찾거나 찾기 위해 사용합니다 ClassLoader.

Java 컴파일러 ( javac), Java 런타임 ( java) 및 기타 Java 도구는 프로그램에서 사용되는 클래스를 다음 순서로 검색합니다.

  1. Java 플랫폼 (부트 스트랩) 클래스
  2. 자바 확장 디렉토리
  3. 사용자 클래스 검색 경로 (약칭 classpath)는 다음 순서로 결정됩니다.

    ㅏ. 기본값은 current working directory (.)입니다.

    비. 의 항목 classpath environment variable이 기본값보다 우선합니다.

    씨. 의 항목 -cp(또는 -classpath재정의) 명령 줄 옵션, classpath환경 변수를.

    디. -jar위의 모든 것을 무시하는 런타임 명령 행 옵션 .

classpath환경 변수는 디렉토리 (많은 클래스 파일을 포함) 및 JAR 파일 (클래스 파일의 단일 파일 아카이브)를 포함 할 수있다. 경우 classpath설정되지 않은, 그것은 디폴트로 current directory. 을 설정하면 classpath을 포함하는 것이 중요합니다 current working directory (.). 그렇지 않으면 현재 디렉토리가 검색되지 않습니다.

옵션을 제공 하거나 Java 프로그램을 실행하는 동안 classpath정의 된 Java로 대체 할 수 있으며 이는 동일한 Unix 또는 Windows 시스템에서 실행되는 다른 Java 응용 프로그램 마다 다른 방법을 사용하는 가장 좋은 방법 입니다.environment variable-cp-classpathclasspath

java -cp "<path/1><separator><path/2>" <path.to.your.MainClass>

구분 기호는 세미콜론입니다 ;-Windows, 콜론 :-Linux

예를 들어 MacOS 용 명령

java -cp "Test.jar:lib/*" my.package.MainClass

여기여기에 더 읽기


객체 인스턴스를 만들지 않고 클래스의 정적 멤버를 직접 호출 할 수 있습니다. 기본 메소드는 정적 Java 가상 머신이므로 프로그램의 시작점 인 기본 메소드를 포함하는 클래스의 인스턴스를 작성하지 않고 호출 할 수 있습니다.


classpath와 path는 환경 변수입니다. 일반적으로, jdk / bin을 경로에 넣어 u가 어디서나 Java 컴파일러를 사용할 수 있도록해야합니다. classpath는 .class 파일의 경로입니다. 클래스 경로에는 기본 디렉토리 마침표 (.)가 있으며 이는 현재 디렉토리를 의미합니다. 하지만 u 패키지를 사용할 때. u는 .class 파일의 전체 경로를 지정하거나 .class 파일 경로를 classpath에 넣어 많은 작업을 저장합니다!

참고 URL : https://stackoverflow.com/questions/2396493/what-is-a-classpath-and-how-do-i-set-it

반응형