ソースバンドルフィーチャーを自動生成

Eclipse Plug-inのソースバンドルフィーチャーを作るのが異常なほど面倒だったので、なんかないかなーと調べたところ発見。

PDEBuild/Individual Source Bundles - Eclipsepedia にやり方が書いてありますが、なんか不明瞭+いくつか情報が落ちてたので改めてまとめておきます。

まず、フィーチャーの build.properties を次のように変更。

  • build.properties
bin.includes = feature.xml,\
               feature_ja.properties,\
               feature.properties
generate.feature@org.ashikunep.yukara.wisdom.source = \
	    org.ashikunep.yukara.wisdom.feature

これだけで org.ashikunep.yukara.wisdom.feature というフィーチャーが利用するすべてのプラグインに対して、 org.ashikunep.yukara.wisdom.source って言う名前のフィーチャーとソースバンドルプラグインを作ってくれるはず…が、feature.xml もいじってこのフィーチャーをincludesに追加しないとだめみたい。

<?xml version="1.0" encoding="UTF-8"?>
<feature
      id="org.ashikunep.yukara.wisdom.feature"
      label="%plugin.brand"
      version="0.0.0"
      provider-name="%author">
   ...
   <includes
         id="org.ashikunep.yukara.wisdom.source"
         version="0.0.0"/>
   ...

ちなみに、Eclipse 3.4のエディタだと警告が出ます、が無視してOK。とりあえず以上の2つでソースバンドルフィーチャーとプラグインを自動生成してくれます。

ただ、これだけだとフィーチャーの名前やらベンダー名などが残念な感じになるので、次のようなファイル構成をフィーチャーのプロジェクト直下に作ります。

  • org.ashikunep.yukara.wisdom.feature/ (フィーチャープロジェクトルート)
    • sourceTemplateFeature/
      • feature.properties
    • sourceTemplatePlugin/
      • plugin.properties

今回は簡略化のために配置したファイルはfeature.propertiesとplugin.propertiesだけですが、実際は生成されるフィーチャーとプラグインに対応するディレクトリの内容が丸まるコピーされるので、ライセンス情報やらなんやらを配置しておくとよいかと思います。

sourceTemplateFeature/feature.properties は、生成されるソースバンドルフィーチャーにコピーされるもので、オリジナルのfeatureと同じexternalizationが掛かっています。なので、オリジナルのfeature.propertiesをコピーして項目を書き換えればOK。

sourceTemplatePlugin/plugin.properties は、生成されるソースバンドルプラグインにコピーされるもので、下記のような形にすればOK。

#Properties file for org.ashikunep.yukara.wisdom.source Plug-in
providerName = The Ashikunep Kotan
pluginName = Yukara Wisdom Source

こちらのproviderName, pluginNameというのはどうやら固定っぽいです。

ともあれ、月末リリースの予定なので何とか間に合ってよかったです。ちなみにIrenkaのときは、CustomBuildCallbacksを使って手動でバージョン番号の調整とかやってた…orz

追記 2008/09/24 12:00

現在、pluginbuilderとHudson組み合わせてCIを実現してますが、この場合は上記の方法だけではダメで、pluginbuilderのプロジェクト/build-files/build.properties に individualSourceBundles=true という記述を加えて運用してます。この場合、個々のプラグインに対してソースバンドルプラグインが生成されるため、回避方法の模索中…