Eclipse 플랫폼 플러그인 Manifest

버전 3.0 - 최종 개정: 2004년 6월 24일

아래의 Manifest 마크업 정의에서는 다양한 이름 지정 토큰 및 ID를 사용합니다. 모호성을 없애기 위해 이러한 이름 지정 토큰 및 ID에는 몇 가지 제품 규칙이 적용됩니다(아래 텍스트 참조). 일반적으로 모든 ID는 대소문자를 구분합니다.

SimpleToken := sequence of characters from ('a-z','A-Z','0-9','_')
ComposedToken := SimpleToken | (SimpleToken '.' ComposedToken)
JavaClassName := ComposedToken
PlugInId := ComposedToken
PlugInPrereq := PlugInId | 'export' PlugInId
ExtensionId := SimpleToken
ExtensionPointId := SimpleToken
ExtensionPointReference := ExtensionPointID | (PlugInId '.' ExtensionPointId)

이 절의 나머지 부분에서는 plugin.xml 파일 구조를 일련의 DTD 단편으로 설명합니다. plugin.dtd 파일에서는 전체 DTD 정의를 볼 수 있습니다.

<?xml encoding="US-ASCII"?>
<!ELEMENT plugin (requires?, runtime?, extension-point*, extension*)>
<!ATTLIST plugin
 name                CDATA #REQUIRED
 id                  CDATA #REQUIRED
 version             CDATA #REQUIRED
 provider-name       CDATA #IMPLIED
 class               CDATA #IMPLIED
>

<plugin> 요소는 Manifest 본문을 정의합니다. 이 요소에는 플러그인 런타임에 대한 정의, 플러그인에 의해 제공되는 새 확장점의 선언뿐만 아니라 기능적 확장의 구성(다른 플러그인에서 정의하거나 해당 플러그인에서 제공하는 확장점으로 구성)이 선택적으로 포함됩니다. <plugin> 속성은 다음과 같이 구성됩니다.

XML DTD 생성 규칙 element*는 해당 요소가 0개 이상 발생함을 의미합니다. element?는 해당 요소가 0개 또는 하나 발생함을 의미합니다. 그리고 element+(아래 참조)는 해당 요소가 한 개 이상 발생함을 의미합니다. 따라서, 위의 <plugin> 정의에 따르는 경우 예를 들어, 런타임 정의만 포함되고 확장점 선언이나 확장 구성은 포함되지 않은 플러그인(예: 다른 플러그인이 의존하는 공통 라이브러리)은 올바릅니다. 마찬가지로, 확장 구성만 포함되고 자체의 런타임이나 확장점은 포함되지 않은 플러그인(예: 다른 플러그인에 제공된 클래스를 다른 플러그인에 선언된 확장점으로 구성)도 올바릅니다.

Manifest의 <requires> 섹션에서는 다른 플러그인에 대한 종속성을 선언합니다.

<!ELEMENT requires (import+)>
<!ELEMENT import EMPTY>
<!ATTLIST import
 plugin              CDATA #REQUIRED
 version             CDATA #IMPLIED
 match               (perfect | equivalent | compatible | greaterOrEqual) "compatible"
 export              (true | false) "false"
 optional            (true | false) "false"
>

각 종속성은 <import> 요소를 사용하여 지정됩니다. 이 요소에는 다음 속성이 포함됩니다.

Manifest의 <runtime> 섹션에는 플러그인 런타임을 구성하는 하나 이상의 라이브러리 정의가 포함됩니다 참조된 라이브러리는 플랫폼 실행 메커니즘(플러그인 클래스 로더)에서 해당 플러그인에 필요한 올바른 코드를 로드하고 실행하는 데 사용됩니다.

<!ELEMENT runtime (library+)>
<!ELEMENT library (export*, packages?)>
<!ATTLIST library
 name                CDATA #REQUIRED
 type                (code | resource) "code"
>
<!ELEMENT export EMPTY>
<!ATTLIST export
 name                CDATA #REQUIRED
>
<!ELEMENT packages EMPTY>
<!ATTLIST packages
  prefixes           CDATA #REQUIRED
>

<runtime> 요소에는 속성이 없습니다.

<library> 요소는 플러그인 런타임을 종합적으로 정의합니다. 적어도 하나의 <library>가 지정되어야 합니다. 각 <library> 요소에는 다음 속성이 있습니다.

각 <library> 요소에서는 내보내야 하는 라이브러리 부분을 지정할 수 있습니다. 내보내기 규칙은 일련의 내보내기 마스크로 지정됩니다. 기본적으로(내보내기 규칙이 지정되지 않음) 라이브러리는 개인용으로 간주됩니다. 각 내보내기 마스크는 name 속성을 사용하여 지정됩니다. 이 속성의 가능한 값은 다음과 같습니다.

Eclipse 2.1 플러그인 전용: 각 라이브러리에서 패키지 접두부를 지정할 수도 있습니다. 이 접두부는 플러그인 및/또는 단편에 대한 클래스 로딩 성능을 향상시키는 데 사용됩니다. <packages> 요소를 지정하지 않으면, 기본적으로 클래스 로딩 확장이 사용되지 않습니다. <packages> 요소에는 다음 속성이 있습니다.

플랫폼의 아키텍처는 구성 가능한 확장점의 개념을 기반으로 합니다. 플랫폼 자체에서는 플랫폼 및 데스크탑에 대한 확장 타스크(예: 메뉴 조치 추가, 임베드된 편집기 제공)를 다루는 일련의 확장점을 사전정의합니다. 사전정의된 확장점 외에, 제공된 각 플러그인에서 추가 확장점을 선언할 수도 있습니다. 본질적으로 플러그인은 확장점을 선언함으로써 외부에서 제공되는 확장과 함께 플러그인 기능을 구성하는 기능을 공개합니다. 예를 들어, 페이지 빌더 플러그인에서는 빌더 팔레트에 새 DTS(Design Time Control)를 추가하기 위한 확장점을 선언할 수 있습니다. 따라서 페이지 빌더에서는 DTC의 의미에 대한 아키텍처를 정의하고 확장점으로 구성된 DTC 확장을 찾는 코드를 구현했습니다.

<!ELEMENT extension-point EMPTY>
<!ATTLIST extension-point
 name                CDATA #REQUIRED
 id                  CDATA #REQUIRED
 schema              CDATA #IMPLIED
>

<extension-point> 요소에는 다음 속성이 있습니다.

실제 확장은 <extension> 섹션에서 확장점(이 플러그인에서 사전정의되거나 새로 선언된 확장점)으로 구성됩니다. 구성 정보는 <extension> 태그와 </extension> 태그 사이에서 제대로 구성된 XML로 지정됩니다. 플랫폼에서는 제대로 구성된 XML에 필수적인 것 이외의 구성 마크업에 대한 실제 양식을 지정하지 않습니다. 이 마크업은 확장점을 선언한 플러그인의 공급자에 의해 정의됩니다. 플랫폼에서는 구성 마크업을 실제로 해석하지 않으며, 확장점 논리가 구성된 모든 확장을 조회할 때 확장점 처리의 일부로 구성 정보를 플러그인에 전달합니다.

<!ELEMENT extension ANY>
<!ATTLIST extension
 point               CDATA #REQUIRED
 id                  CDATA #IMPLIED
 name                CDATA #IMPLIED
>

<extension> 요소에는 다음 속성이 있습니다.

중요: <extension> 요소의 컨텐츠는 ANY 규칙을 사용하여 선언됩니다. 따라서 제대로 구성된 XML은 확장 구성 섹션(<extension>과 </extension> 태그 사이) 내에서 지정될 수 있습니다.

단편은 플러그인의 범위를 증가시키는 데 사용됩니다. 예제는 다른 언어에서의 레이블 또는 메시지와 같은 데이터를 통합합니다.

<?xml encoding="US-ASCII"?>
<!ELEMENT fragment (requires?, runtime?, extension-point*, extension*)>
<!ATTLIST fragment
 name                CDATA #REQUIRED
 id                  CDATA #REQUIRED
 version             CDATA #REQUIRED
 provider-name       CDATA #IMPLIED
 plugin-id           CDATA #REQUIRED
 plugin-version      CDATA #REQUIRED
 match               (perfect | equivalent | compatible | greaterOrEqual) "compatible"
>

각 단편은 특정 플러그인과 연관되어 있어야 합니다. 연관된 플러그인은 <plugin-id>, <plugin-version> 그리고 선택적으로 <match>로 식별합니다. 여기서 지정한 사항이 하나 이상의 플러그인과 일치할 경우 가장 높은 버전 번호의 일치하는 플러그인이 사용됩니다.

단편의 <requires>, <runtime>, <extension-point>, <extension> 컴포넌트는 일치하는 플러그인에 논리적으로 추가됩니다.

<fragment> 속성은 다음과 같습니다.