클래스 경로와 빌드 경로의 차이점은 무엇입니까?


86

이 두 용어와 혼동됩니다.

또한 Spring MVC 프로젝트의 src 폴더 아래에 파일을 생성하려면 어떻게해야합니까? File 개체를 사용하여 만들면 C : \ SpringSourceTool 안에 파일이 생성됩니다. 이것이 ClassPath 맞습니까?

applicationcontext응용 프로그램 의 폴더 또는 루트를 어떻게 얻을 수 있습니까?

답변:


100

빌드 경로는 응용 프로그램을 구축하는 데 사용됩니다. 여기에는 애플리케이션을 컴파일하는 데 필요한 모든 소스 파일과 모든 Java 라이브러리가 포함됩니다.

클래스 경로는 애플리케이션을 실행하기 위해 사용된다. 여기에는 Java 애플리케이션을 실행하는 데 필요한 모든 Java 클래스 및 라이브러리가 포함됩니다. 클래스 경로는 필수이며 .Java 가상 머신이 사용자 정의 경로를 찾을 수없는 경우 사용되는 기본 경로입니다 . ( jar 매니페스트의 CLASSPATH환경 변수, -cp플래그 또는 Class-Path:속성)


그러나 javac는 클래스 경로 인수를 사용합니다. 빌드 경로를 지정하기 위해이 매개 변수가 "오버로드"되었다고 말할 수 있습니까?
aioobe 2010 년

4
아니요. classpath 인수는 컴파일러에게 런타임시 사용 가능 / 제공 될 것으로 예상해야하는 힌트입니다. 사용하는 모든 클래스 (예 : JFC, Libraries, ...)를 빌드하지 않기 때문입니다. buildpath는 소스 및 / 또는 소스 / 컴파일 의존성과 장소들을 찾아하는 모두 포함되어 있습니다.
Johannes Wachter

플러그인을 개발하는 동안 필요한 모든 라이브러리를 클래스 경로에 추가했지만 아무것도 가져올 수 없었습니다. Eclipse는 경로를 빌드하기 위해 추가 할 때까지 보지 못했습니다.
Bax

51

클래스 경로는 (표준) Java 컴파일러 및 Java 런타임에 컴파일 된 클래스를 찾을 위치를 알려주는 일반적인 방법입니다. 일반적으로 일련의 JAR 파일 이름 및 디렉토리 이름입니다. 컴파일러와 런타임 시스템에서 사용하는 클래스 경로 는 동일 할 필요 는 없지만 , 특히 소규모 프로젝트의 경우 일반적으로 이어야합니다 .

Buildpath는 표준 Java 용어가 아닙니다. 일반적인 IDE가 응용 프로그램을 구성하는 "프로젝트"간의 관계를 지정하는보다 풍부한 방법을 가리키는 용어입니다. IDE는이를 사용하여 Java 코드를 컴파일하기위한 클래스 경로 및 소스 경로와이를 실행하기위한 클래스 경로를 파악합니다. IDE는 또한 빌드 경로를 사용하여 코드 및 해당 종속성을 WAR 파일로 패키징하는 방법을 파악합니다.

예를 들어 프로젝트의 Eclipse 빌드 경로에는 종속 된 다른 프로젝트가 포함되고 프로젝트가 포함하거나 의존하는 추가 라이브러리 JAR이 나열됩니다. 또한 다운 스트림 프로젝트가 의존 할 수있는 현재 프로젝트의 패키지를 나열합니다.

(프로젝트에 Maven을 사용하는 경우 IDE 빌드 경로 메커니즘은 POM 파일에 선언 된 종속성에 대한 보조입니다. 예를 들어 Eclipse를 m2eclipse와 함께 사용하면 빌드 경로가 POM 파일에서 합성됩니다.)


27

클래스 경로는 런타임에 컴파일 된 클래스 및 리소스를로드하는 데 사용됩니다.

빌드 경로는 컴파일 타임에 프로젝트를 빌드하는 데 필요한 종속성을 찾는 데 사용됩니다.


클래스 경로는 .class파일 (및 기타 컴파일 된 리소스)을 찾는 데 사용되고 빌드 경로는 컴파일해야하는 소스 파일을 찾는 데 사용 된다고 말할 수 있습니까?
Adam

1
@Adam 나는 그것이 완전히 사실이라고 생각하지 않습니다. 빌드 경로에는 때때로 소스 파일을 컴파일하기 위해 .class 파일이 필요합니다. 따라서 빌드 경로는 배후에서도 클래스 경로를 사용합니다. Java CLI를 사용하여 Java 프로젝트를 컴파일하고 실행하는 데 시간이 걸리면 이것을 볼 수 있습니다. javac 및 java 명령에는 둘 다 필요하기 때문에 둘 다 classpath 옵션이 있습니다.
intrepistar_88

4

각 Java 프로젝트에는 프로젝트를 컴파일하는 데 필요한 모든 종속성을 지정하는 자체 빌드 경로가 있습니다. 이러한 종속성은 작업 공간의 다른 Java 프로젝트, Java 아카이브 .jar 파일 또는 .class 파일이 포함 된 폴더에서 올 수 있습니다.

CLASSPATH 환경에서는 .class 파일 만 지정해야합니다 (예 : jar, zip 파일 – jar, zip 파일에는 Java 클래스 만 있음). 즉, JVM (Java Virtual Machine)이 Java 클래스 파일을 찾는 데 도움이됩니다.

또한 Spring MVC 프로젝트의 src 폴더 아래에 파일을 생성하려면 어떻게해야합니까? File 객체를 사용하여 만들면 C : \ SpringSourceTool ... 안에 파일이 생성됩니다.

여기에서 JVM이 시작된 곳이며, 다른 곳에서 파일을 만들려면 여기에서 상대 경로를 사용하십시오.

자세한 내용은 이것이것을 참조하십시오 .


답변에서 빌드 경로를 언급하지 않았습니다.
aioobe

4

Andreas_D의 답변에 추가 하여 IDE / 컴파일러가 코드에서 사용하는 외부 패키지 및 클래스를 찾는 데 필요한 빌드 경로 를 설명하고 싶습니다 . 이를 '종속성' 이라고도 합니다.

NB : 이러한 외부 패키지는 압축 된 .jar 파일 안에 패키징되거나 실제로 '라이브러리' 안에 패키징 된 여러 jar 파일이있을 수 있습니다 . 라이브러리 또는 라이브러리 그룹은 종종 '프레임 워크'를 구성 합니다.

코드에 다른 사람이 작성한 코드가 필요한 경우 명령을 사용하여 클래스로 가져올 수 있습니다 import. 그러나 컴파일러 또는 IDE가 해당 클래스의 위치를 ​​알아야하기 때문에이 명령 자체로는 충분하지 않습니다. 빌드 경로 에 지정 합니다 .

classpath다른 한편으로는 코드의 실제 실행 중에 종속성을 찾을 수있는 응용 프로그램을 실행하는 JVM을 알려줍니다.

또한 참고 : Classpath는 JVM에서 사용하기위한 것입니다.

Buildpath는 IDE / 컴파일러에서 사용하며 개발 환경에서 클래스 경로를 구성하는 수단입니다. IDE를 통해 빌드 경로를 구성 할 때 .classpath라는 프로젝트에 숨겨진 파일도 구성하게됩니다. 배포시 JVM에 클래스 경로를 제공하는 데 사용됩니다.


1

클래스 경로 ( 위키 백과에서 ) :

전형적인 동적 로딩 동작과 유사하게, 자바 프로그램을 실행할 때, 자바 가상 머신은 느리게 클래스를 찾고로드합니다 (클래스가 처음 사용될 때만 클래스의 바이트 코드를로드합니다). 클래스 경로는 이러한 클래스를 정의하는 파일에 대해 파일 시스템에서 찾을 위치를 Java에 알려줍니다.

가상 머신은 다음 순서로 클래스를 검색하고로드합니다.

부트 스트랩 클래스 : Java 플랫폼의 기본 클래스 (Java 클래스 라이브러리의 공용 클래스 및이 라이브러리가 작동하는 데 필요한 개인 클래스로 구성됨).

확장 클래스 : JRE 또는 JDK의 확장 디렉토리에있는 패키지,

jre / lib / ext / 사용자 정의 패키지 및 라이브러리

기본적으로 JDK 표준 API 및 확장 패키지의 패키지 만 찾을 위치를 설정하지 않고도 액세스 할 수 있습니다. 모든 사용자 정의 패키지 및 라이브러리의 경로는 명령 줄 (또는 클래스가 포함 된 Jar 파일과 연결된 Manifest)에서 설정해야합니다.

간단히 말해, 프로그램이 실행되는 동안 JVM은 필요한 경우에만 클래스를로드합니다. 클래스가 필요할 때 JVM은 클래스 경로에 따라 바이트 코드를로드 할 위치 (예 : .class파일)를 알 수 있습니다.

반면에 빌드 경로 는 일반적으로 Eclipse와 같은 IDE에서 프로젝트의 소스 코드를 컴파일하는 데 필요한 추가 라이브러리를 찾을 위치를 파악하는 데 사용됩니다. 빌드 경로는 런타임 중에 사용되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.