ソースのフィーチャーおよびプラグインの生成

PDE ビルドで、ソースのフィーチャーまたはプラグインを生成することができます。次の SDK フィーチャーについて考えてみます。
  features/

org.foo.sdk/
feature.xml: <includes id="org.foo.rcp" />
<includes id="org.foo.rcp.source" />
build.properties: generate.feature@org.foo.rcp.source = org.foo.rcp
org.foo.rcp/
feature.xml: <plugin id="org.foo.BundleA" />
<plugin id="org.foo.BundleB" />
<plugin id="org.foo.BundleB.win32" fragment="true" os="win32" />

SDK の考え方は、フィーチャーだけでなくそのフィーチャーのソースまで組み込むことです。  フィーチャーの build.properties ファイルにある generate.feature プロパティーに注目してください。  このプロパティーが PDE ビルドに、フィーチャー「org.foo.rcp」のコンテンツを基にして「org.foo.rcp.source」という名前のフィーチャーを生成するように指示します。  PDE ビルドは、org.foo.rcp.source フィーチャー、ソース・コードを含むプラグイン、およびフィーチャーに組み込まれたプラットフォーム固有のバンドルのソースを含むフラグメントを生成します。
  features/

org.foo.rcp.source/
feature.xml: <plugin id="org.foo.rcp.source"/>
<plugin id="org.foo.rcp.source.win32" fragment="true" os="win32" />
plugins/
org.foo.rcp.source/src/
org.foo.BundleA/src.zip
org.foo.BundleB/src.zip
org.foo.rcp.source.win32/src/
org.foo.BundleB.win32/src.zip

生成されたソース・フィーチャーのカスタマイズ

generate.feature プロパティーの形式は、次のようになっています。
generate.feature@<source feature id> = <feature id> [, feature@<feature id>] [, plugin@<plugin id>[;unpack="false"]]
plugin@ は、元のフィーチャーに含まれていなかったプラグインを生成されたソース・フィーチャーに追加する場合に使用します。  これは、ドキュメンテーション・プラグインで役に立ちます。  feature@ をソース・テンプレートと併用すると、ソース・フィーチャーをネストすることができます (以下を参照)。

ソース・テンプレート

ソース・フィーチャーの生成元のフィーチャーは、生成されたソース・フィーチャーに組み込まれるテンプレート・ファイルを提供することができます。
  features/

org.foo.rcp/
sourceTemplateFeature/<files to be included in generated source feature>
sourceTemplatePlugin/<files to be included in generated source plugin>
sourceTemplateFragment/<files to be included in generated platform specific fragments>

この sourceTemplate フォルダーにあるファイルはすべて、所定の生成済みフィーチャー/プラグイン/フラグメントに組み込まれます。  具体的には、上記ディレクトリーからのファイルが、PDE ビルドで生成されたファイルに置き換わります。  これによって、PDE ビルドがサポートしないソース・フィーチャーが必要な場合に、カスタムの feature.xml を提供することができます。

生成されたソース・フィーチャーのネスト

生成されたソース・フィーチャーの sourceTemplateFeature/build.properties ファイルを指定することで、ソース・フィーチャーをネストすることができます。このファイルには、ネストされるソース・フィーチャーの generate.feature プロパティーが含まれています。  また、feature@ を使用するか、テンプレート feature.xml を使用して、最上位ソースの feature.xml に、ネストされるソース・フィーチャーを組み込むようにする必要があります。

  features/

org.foo.sdk/
sourceTemplateFeature/
build.properties: generate.feature@org.foo.nested.source = org.foo.nested

feature.xml: <includes id="org.foo.rcp" />
<includes id="org.foo.rcp.source" />

build.properties: generate.feature@org.foo.rcp.source = org.foo.rcp, feature@org.foo.nested.source

org.foo.rcp/...
org.foo.nested/...
 上の例で、org.foo.sdk には、org.foo.rcp.source という名前の生成済みソース・フィーチャーが含まれています。  この生成済みソース・フィーチャーにより、テンプレート・ファイル sourceTemplateFeature/build.properties が取得されます。  また、その feature.xml に org.foo.nested.source が組み込まれます。 つまり、PDE ビルドが生成済みの org.foo.rcp.source を処理する場合、PDE ビルドは org.foo.nested.source フィーチャーと generate.feature プロパティーの組み込みを確認してから org.foo.nested.source を生成します。

ソース・プラグインの生成

フィーチャーを基にしてソースを生成するのではなく、単一のプラグインを基にして単一のソース・プラグインを生成することもできます。  これを実行するためのプロパティーは、次のとおりです。

generate.plugin@<source plug-in id>=<plug-in id>

例:
  features/

org.foo.sdk/
feature.xml: <plugin id="org.foo.rcp" />
<plugin id="org.foo.rcp.source" />

build.properties: generate.plugin@org.foo.rcp.source = org.foo.rcp