이 절에서는 Java 빌드 경로 설정 방법에 대해 설명합니다. 이 빌드 경로는 Java 프로젝트를 빌드하기 위해 사용되는 클래스 경로입니다(IJavaProject).
간단하게, 클래스 경로는 사용 가능한 유형을 설명하는 클래스 경로 항목(IClassPathEntry)의 배열입니다. 유형은 소스 또는 2진 양식으로 표시될 수 있으며 경로에서의 항목 순서에 따라 빌드 중 유형을 분석하기 위한 찾아보기 순서가 정의됩니다.
Java 빌드 경로는 Java 프로젝트 요소 구조에 반영됩니다. 프로젝트에 패키지 단편 루트(IPackageFragmentRoot)를 조회할 수 있습니다. 각각의 클래스 경로 항목은 하나 이상의 패키지 단편 루트에 맵핑되며, 각 루트에는 패키지 단편 세트가 포함되어 있습니다.
빌드 경로에 대한 이 설명에서는 빌드 경로와 별도로 정의할 수 있는 Java 런타임 경로는 다루지 않습니다. (런타임 클래스 경로에 대한 설명은 Java 코드 실행을 참조하십시오.)
해당 프로젝트의 Java 요소에
setRawClasspath를 사용하여 프로젝트의 빌드 경로를 프로그래밍하여 변경할 수 있습니다. 다음 코드는 프로젝트 자원의 클래스 경로를 설정합니다.
IProject project = ... // get some project resource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(참고: "원래" 클래스 경로라는 용어는 분석되지 않은 항목 위치를 설명하기 위해 변수가 사용되었음을 강조하는 데 사용됩니다.)
Java 빌드 경로는 프로젝트의 파일 구조에서 '.classpath'라는 파일에 있습니다. 이 파일의 목적은 일부 소스 코드 저장소를 통해 다른 사용자와 Java 빌드 경로 설정을 공유하는 방법을 제공하는 것입니다. 특히 이 파일은 직접 편집하지 마십시오. 손상될 수 있습니다.
클래스 경로 항목은 JavaCore에 정의된 팩토리 메소드를 사용하여 정의할 수 있습니다. 클래스 경로 항목은 다음을 참조할 수 있습니다.
다음은 프로젝트 'MyProject'의 소스 폴더 'src'를 선언하는 클래스 경로 예제입니다. IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
다음은 'MyProject'의 클래스 파일 폴더 'lib'를 선언하는 클래스 경로 예제입니다.
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //no source
null, //no source
false); //not exported
다음 클래스 경로 항목은 소스 첨부를 가집니다.
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // library location
new Path("d:/lib/foo_src.zip"), //source archive location
new Path("src"), //source archive root path
true); //exported
소스 아카이브 루트 경로는 소스 아카이브 내의 루트 위치에 대해 설명합니다. 널로 설정된 경우 아카이브의 루트는 동적으로 추론됩니다.
다음의 클래스 경로 입력은 필수 프로젝트 'MyFramework'를 선언합니다.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exported
작업공간이 시작될 때 확장점 org.eclipse.jdt.core.classpathVariableInitializer을 통해 호출되는 자동 클래스 경로 변수 초기화 프로그램을 등록할 수 있습니다.
다음의 클래스 경로 입력은 변수 'HOME'에서 갖고 있는 라이브러리 전체 위치입니다. 소스 첨부는 변수 'SRC_HOME' 및 'SRC_ROOT'를 사용하여 정의됩니다.
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // library location
new Path("SRC_HOME/foo_src.zip"), //source archive location
new Path("SRC_ROOT"), //source archive root path
true); //exported
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress
컨테이너를 바인드해야 할 때 확장점 org.eclipse.jdt.core.classpathContainerInitializer를 통해 느리게 호출되는 자동 클래스 경로 컨테이너 초기 설정자를 등록할 수 있습니다.
다음의 클래스 경로 입력은 시스템 클래스 라이브러리 컨테이너를 선언하는 예제입니다.
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
false); //not exported
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // value for 'myProject'
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Basic JDK library container"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
클래스 경로 소스 항목에는 클래스 경로에서 소스 폴더의 특정 자원이 표시되지 않도록 제외 패턴이 지정될 수도 있습니다. 패턴을 사용하면 자원 트리의 지정된 부분이 필터되도록 할 수 있습니다. 각 제외 패턴 경로는 클래스 경로 항목에 상대적이며 Ant와 유사한 패턴 메커니즘을 사용합니다. 외부 패턴이 내부 패턴을 제외할 경우 중첩된 소스 폴더를 지정하는 데 제외 패턴을 사용할 수 있습니다.
제외 패턴에 대한 세부사항은 getExclusionPatterns()를 참조하십시오.
Java 프로젝트 API isOnClasspath는 특정 자원이 해당 클래스 경로에 있는지 여부를 판별하기 전에 포함 및 제외 패턴을 모두 확인합니다.
설명:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // source folder location new Path[] { outputLocation }, // excluded nested folder outputLocation); // output location
클래스 경로 소스 항목에는 클래스 경로에 자원이 표시되도록 명시적으로 정의하는 포함 패턴이 지정될 수도 있습니다. 포함 패턴을 지정하지 않으면, 소스 항목은 이 소스 항목의 경로에 루트 지정된 자원 트리에 모든 관련 파일을 포함합니다. 하나 이상의 포함 패턴을 지정한다는 것은 자원 트리의 지정된 부분만 포함되는 것을 의미합니다. 지정된 각 경로는 상대 경로이어야 하며 이 소스 항목의 경로와 관련되어 해석됩니다. 파일 패턴은 대소문자를 구분합니다. 이들 패턴 중 하나 이상에 의해 일치되는 파일은 이 항목의 제외 패턴 중 하나 이상에 의해 제외된 경우를 제외하고는 해당 패키지 단편 루트에 포함됩니다.
경로 패턴의 구문 및 시맨틱에 대한 설명은
getExclusionPatterns()를
참조하십시오. 포함 패턴이 없다는 것은 의미상으로는 명시적 포함 패턴 **
과 동등합니다.
Java 프로젝트 API isOnClasspath는 특정 자원이 해당 클래스 경로에 있는지 여부를 판별하기 전에 포함 및 제외 패턴을 모두 확인합니다.
예제:
src/**
는 자체적으로 src
라는 루트 폴더에 있는 모든 파일을 포함합니다.
src/**
및 tests/**
는 src
및 tests
라는
루트 폴더에 있는 모든 파일을 포함합니다.
src/**
과 제외 패턴 src/**/Foo.java
는 Foo.java
라는
폴더를 제외하고는 src
라는 루트 폴더에 있는 모든 파일을 포함합니다.