Java 모델은 Java 프로그램의 작성, 편집 및 빌드와 연관된 오브젝트를 모델링하는 클래스 세트입니다. Java 모델 클래스는 org.eclipse.jdt.core에 정의됩니다. 이러한 클래스는 자원에 대한 Java 고유의 동작을 구현하고 나아가 Java 자원을 모델 요소로 분해합니다.
org.eclipse.jdt.core 패키지는 Java 프로그램을 구성하는 요소를 모델링하는 클래스를 정의합니다. JDT는 내부 메모리 오브젝트 모델을 사용하여 Java 프로그램의 구조를 표시합니다. 이 구조는 프로젝트 클래스 경로로 부터 얻어집니다. 이 모델은 계층적입니다. 프로그램의 요소는 하위 요소로 분해될 수 있습니다.
Java 요소 조작은 자원 오브젝트 조작과 유사합니다. Java 요소에 대한 작업은 실제로 기본 모델 오브젝트에 대한 처리 작업입니다. 작업공간에 요소가 실제로 있는지 여부를 판별하려면 exists() 프로토콜을 사용해야 합니다.
다음 표는 여러 가지 유형의 Java 요소에 대해 요약합니다.
요소 | 설명 |
---|---|
IJavaModel | 작업공간에 해당하는 루트 Java 요소를 표시합니다. 모든 프로젝트의 상위는 Java 속성을 가집니다. 또한 Java 속성 없이 프로젝트에 액세스할 수 있는 권한도 제공합니다. |
IJavaProject | 작업공간의 Java 프로젝트를 표시합니다( IJavaModel의 하위). |
IPackageFragmentRoot | 일련의 패키지 단편을 표시하고 단편을 폴더, JAR 또는 ZIP 파일인 기본 자원으로 맵핑합니다(IJavaProject의 하위). |
IPackageFragment | 전체 패키지 또는 패키지 일부에 해당하는 작업공간의 일부를 표시합니다(IPackageFragmentRoot의 하위). |
CompilationUnit | Java 소스(.java) 파일을 표시합니다( IPackageFragment의 하위). |
IPackageDeclaration | 컴파일 단위의 패키지 선언을 표시합니다(ICompilationUnit의 하위). |
IImportContainer | 컴파일 단위의 패키지 가져오기 선언에 대한 콜렉션을 표시합니다(ICompilationUnit의 하위). |
IImportDeclaration | 단일 패키지 가져오기 선언을 표시합니다 (IImportContainer의 하위). |
IType | 컴파일 단위 내의 소스 유형이나 클래스 파일 내의 2진 유형을 표시합니다. |
IField | 유형 내의 필드를 표시합니다(IType의 하위). |
IMethod | 유형 내의 메소드나 생성자를 표시합니다(IType의 하위). |
IInitializer | 유형 내의 static 또는 인스턴스 초기 설정자를 표시합니다(IType의 하위). |
IClassFile | 컴파일된(2진) 유형을 표시합니다(IPackageFragment의 하위). |
모든 Java 요소는 IJavaElement 인터페이스를 지원합니다.
요소의 일부는 패키지 보기에 표시됩니다. 이러한 요소는 탐색하기 전에 열어야 하기 때문에 IOpenable 인터페이스를 구현합니다. 아래의 그림은 이러한 요소가 패키지 보기에 어떻게 표시되는지 보여줍니다.
IOpenable을 구현하는 Java 요소는 주로 기본 자원 파일에 있는 정보에서 작성됩니다. 동일한 요소는 보통 네비게이터 보기에 표시됩니다.
기타 요소는 Java 컴파일 단위를 구성하는 항목에 해당됩니다. 아래의 그림은 소스 요소를 컴파일 단위로 표시하는 컨텐츠 아웃라이너와 Java 컴파일 단위입니다.
이러한 요소는 해당 소스 코드를 제공할 수 있기 때문에 ISourceReference 인터페이스를 구현합니다. 이러한 요소가 컨텐츠 아웃라이너에서 선택되면 해당 소스 코드는 Java 편집기에 표시됩니다.
대부분의 Java 요소는 작업공간의 일반 자원에 해당됩니다. 일반 자원에서 Java 요소를 작성할 때 JavaCore 클래스가 시작되는 지점입니다. 다음 코드 스니펫은 해당 자원에서 Java 요소를 가져오는 방법을 보여줍니다.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { IJavaProject myJavaProject= JavaCore.create(myProject); if (myJavaProject == null) // the project is not configured for Java (has no Java nature) return; // get a package fragment or package fragment root IJavaElement myPackageFragment= JavaCore.create(myFolder); // get a .java (compilation unit), .class (class file), or // .jar (package fragment root) IJavaElement myJavaFile = JavaCore.create(myFile); }
Java 요소가 있는 경우 JDT API를 사용하여 모델을 순회하고 조회할 수 있습니다. Java 요소에 포함된 비Java 자원을 조회할 수도 있습니다.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { ... // get the non Java resources contained in my project. Object[] nonJavaChildren = myJavaProject.getNonJavaResources(); ...
간단한 프로젝트에서 Java 프로젝트를 작성할 때 JavaCore는 프로젝트가 Java 속성으로 구성되어 있는지 확인합니다. JDT 플러그인은 프로젝트 속성을 사용하여 Java 동작을 가지도록 프로젝트를 지정합니다. 이 속성(org.eclipse.jdt.core.JavaCore#NATURE_ID)은 "새 Java 프로젝트" 마법사가 프로젝트를 작성할 때 프로젝트에 지정됩니다. 프로젝트에 Java 속성이 구성되어 있지 않는 경우 프로젝트 작성을 요청받을 때 JavaCore는 널을 리턴합니다.
JavaCore는 소스 코드와 라이브러리를 찾는 위치와 출력 2진(.class) 파일을 생성하는 위치를 포함하여 Java 클래스 경로를 유지하는 데에도 사용됩니다.
Java 프로젝트의 고유한 특성은 무엇입니까? Java 프로젝트는 클래스 경로를 ".classpath" 파일에 기록하고 Java 증분 프로젝트 빌더를 프로젝트의 빌드 스펙에 추가합니다. 그렇지 않은 경우 Java 프로젝트가 일반 프로젝트이므로 플러그인이 다른 속성 및 다른 증분 빌더로 구성될 수 있습니다. 프로젝트를 고유의 동작과 Java 동작으로 구성하는 플러그인은 NewJavaProjectWizardPage를 사용하여 Java 속성을 자체의 사용자 정의 속성이나 동작뿐 아니라 프로젝트에도 할당합니다.
IJavaModel은 Java 프로젝트 속성을 지닌 작업공간의 모든 프로젝트에 대한 상위로 간주할 수 있습니다(그러므로 IJavaProject로 처리될 수 있음).