프로젝트 네이처

org.eclipse.core.resources.natures

작업공간에서 프로젝트 네이처(축약하여 "네이처"이라고 함)의 개념을 지원합니다. 네이처는 라이프 사이클 동작을 프로젝트와 연관시킵니다. 네이처는 org.eclipes.core.resources.IProject에서 정의된 setDescription 메소드를 사용하여 프로젝트별로 설치되며, 프로젝트가 열릴 때 자동으로 구성되고 프로젝트가 처리 완료될 때 구성 해제됩니다. 예를 들어, Java 네이처는 프로젝트에 추가될 때 Java 빌더를 설치하고 다른 프로젝트 구성을 합니다.

네이처 확장점을 사용하면 네이처 작성기는 기호 이름으로 자신의 네이처 구현을 등록한 다음 작업 공간에서 네이처 구현을 사용하여 네이처를 찾아 구성할 수 있습니다. 기호 이름은 네이처 확장의 ID입니다. 네이처 확장을 정의할 경우, 의미를 식별하고 사용자에게 제공될 수도 있는 "name" 네이처에 읽을 수 있는 값을 포함하는 것이 바람직합니다.

네이처는 다른 네이처와의 관계 제한조건을 지정할 수 있습니다. "네이처 중 하나" 제한조건은 해당 세트에 속한 네이처 하나만 특정한 시간에 프로젝트에 존재할 수 있도록 지정합니다. 이 제한조건을 적용하면 서로 호환 가능하지 않은 네이처들이 상호 배제됩니다. "필수 네이처" 제한조건은 다른 네이처에 대한 종속성을 지정합니다. 네이처가 프로젝트에 추가되면 모든 필수 조건도 추가되어야 합니다. 네이처가 구성되고 구성 해제될 때는 항상 필수 네이처가 먼저 구성되고 나중에 구성 해제됩니다. 이 때문에 네이처 간의 순환적 종속성은 허용되지 않습니다.

네이처 추가나 제거로 인해 이전에 충족되었던 제한조건이 위반되는 경우 네이처는 프로젝트에 추가되거나 프로젝트에서 제거될 수 없습니다. 네이처가 프로젝트에 구성되어도 나중에 제한조건이 충족되지 않는 것이 발견되면, 해당 네이처 및 이 네이처를 요구하는 모든 네이처가 사용 안함으로 표시되지만 프로젝트에는 남아 있습니다. 예를 들어, 이런 상황은 필수 네이처가 설치에서 누락될 경우에 발생합니다. 설치에서 누락된 네이처 및 종속성 주기와 관련된 네이처도 사용 안함으로 표시됩니다.

네이처는 구성할 증분 프로젝트 빌더도 지정할 수 있습니다. 작업공간에서는 이 정보를 사용하여 해당 네이처가 빌드되는 프로젝트에 존재하고 사용 가능할 때만 빌더가 실행되도록 합니다. 네이처가 프로젝트에서 제거되었지만 네이처의 구성 해제 메소드가 해당 빌더를 제거하지 못한 경우 작업공간은 스펙에서 해당 빌더를 자동으로 제거합니다. 두 네이처가 마크업에서 같은 증분 프로젝트 빌더를 지정하는 것은 허용되지 않습니다.

네이처에는 또한 연관된 프로젝트에서 링크된 자원의 작성을 금지하는 기능도 있습니다. allowLinking 네이처를 "false"로 설정하면 네이처는 링크된 자원이 작성되지 않도록 선언할 수 있습니다. 이 기능은 릴리스 2.1에서 새로운 기능입니다.

릴리스 3.1에서부터, 네이처가 임의 컨텐츠 유형과의 연관성을 선언할 수 있는데, 이는 작업공간의 파일에서 컨텐츠 유형 판별이 발생하는 방법에 영향을 줍니다. 충돌이 있는 경우(둘 이상의 컨텐츠 유형이 주어진 파일에 대해 동일하게 적합해 보이는 경우) 대응하는 프로젝트에 구성된 네이처 중 하나와 연관성이 있는 컨텐츠 유형이 선택됩니다.

<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #REQUIRED

name  CDATA #IMPLIED>


<!ELEMENT runtime (run)>



<!ELEMENT run (parameter*)>

<!ATTLIST run

class CDATA #REQUIRED>


<!ELEMENT parameter EMPTY>

<!ATTLIST parameter

name  CDATA #REQUIRED

value CDATA #REQUIRED>


<!ELEMENT one-of-nature EMPTY>

<!ATTLIST one-of-nature

id CDATA #REQUIRED>


<!ELEMENT requires-nature EMPTY>

<!ATTLIST requires-nature

id CDATA #REQUIRED>


<!ELEMENT builder EMPTY>

<!ATTLIST builder

id CDATA #REQUIRED>


<!ELEMENT options EMPTY>

<!ATTLIST options

allowLinking (true | false) >


<!ELEMENT content-type EMPTY>

<!ATTLIST content-type

id CDATA #REQUIRED>


다음은 세 가지 네이처 구성에 관한 예제입니다. waterNature 및 fireNature는 같은 독점 세트에 속하므로 같은 프로젝트에서 공존할 수 없습니다. snowNature에는 waterNature가 필요하므로 snowNature는 waterNature가 없는 프로젝트에서 사용할 수 없습니다. 이에 따라 snowNature는 fireNature가 있는 프로젝트에서는 사용할 수 없게 됩니다. fireNature도 링크된 자원의 작성을 허용하지 않습니다.

 
   

<extension id=

"fireNature"

name=

"Fire Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Fire"

/>

</runtime>

<one-of-nature id=

"com.xyz.stateSet"

/>

<options allowLinking=

"false"

/>

</extension>

<extension id=

"waterNature"

name=

"Water Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Water"

/>

</runtime>

<one-of-nature id=

"com.xyz.stateSet"

/>

</extension>

<extension id=

"snowNature"

name=

"Snow Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Snow"

>

<parameter name=

"installBuilder"

value=

"true"

/>

</run>

</runtime>

<requires-nature id=

"com.xyz.coolplugin.waterNature"

/>

<builder id=

"com.xyz.snowMaker"

/>

</extension>

이 확장이 ID가 "com.xyz.coolplugin"인 플러그인에서 정의된 경우, 이 네이처의 완전한 이름은 "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" 및 "com.xyz.coolplugin.snowNature"입니다.

클래스 네이처 값에서 org.eclipse.core.resources.IProjectNature 구현자를 표시해야 합니다. org.eclipse.core.resources.IProjectNatureDescriptor 인터페이스를 사용하여 네이처 정의를 조사할 수 있습니다. org.eclipse.core.resources.IWorkspace에서 getNatureDescriptor(String)getNatureDescriptors() 메소드를 사용하여 설명자 오브젝트를 얻을 수 있습니다.

플랫폼에 사전 정의된 네이처가 없습니다. 필요한 경우 특정 제품 설치에 필요한 네이처가 포함될 수 있습니다.