Eclipseはマイクロカーネルか?

って書いておいて、マイクロカーネルだといってみる。まだ整理仕切れていないが、自分がこれまで調べてみて、わかったことをまとめてみた。

なお、この日記では文脈に応じてBundleとPluginを呼び変えてますが、どちらも同じものをさします。OSGiから見たときはBundle、Eclipseから見たときはPluginと呼ぶようにしましたので、注意してください。

UI的にはコア部分にWorkbenchがいて、それに対してViewやEditorを追加していく。もっと低レイヤーで語ってみると、Equinox(OSGi)が基盤となり、それに対して、BundleServiceを登録していく。plugin.xmlを読み込んで、ViewやEditorなどを作成するようなBundleServiceがまず登録される。

Eclipseは起動すると標準では@install_dir*1/confugure/config.iniを見て、最初に起動すべきBundleを取得する。Eclipse 3.3.1の例でみてみる。

osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start, org.eclipse.core.runtime@start

つまり、org.eclipse.core.runtimeとorg.eclipse.equinox.commonとorg.eclipse.update.configuratorの3つが起動時に活性化されるBundleだ。「@」の後ろの数字は起動順をあらわす。何もない場合はデフォルトの起動順らしいが、今回はそのデフォルトも指定されていないので、最後となる。

osgi.bundlesの後の設定に

eclipse.product=org.eclipse.sdk.ide

というのがあるが、これでEclipseの起動ポイントを示している。
org.eclipse.sdkプラグインのideというIDの「org.eclipse.core.runtime.products」の拡張ポイントを指定している。
EclipseはBundleの構成によって、複数のアプリケーションをインストールできる。そのため、起動するアプリケーションを指定できるようになっている。

Eclipse 3.3の場合、

@install_dir/eclipsec -consolelog -application a

など明らかに間違えた名前のアプリケーションを指定すると、登録されているアプリケーションの一覧を見ることができる。その中からorg.eclipse.ant.core.antRunnerを選んで実行してみると、

C:\Users\kompiro\eclipse3.3.1\eclipse>eclipsec.exe -application org.eclipse.ant.core.antRunner
Buildfile: C:\Users\kompiro\eclipse3.3.1\eclipse\build.xml

BUILD FAILED
Buildfile: C:\Users\kompiro\eclipse3.3.1\eclipse\build.xml does not exist

Total time: 0 seconds

こんな感じでEclipse上のAntが起動する。Eclipse上からAntを実行するとEclipseで登録されている特殊なタスクの実行ができるが、この起動ランチャから実行すると同様に実行できる。他にもヘルプサーバーなどの機能もあるので、試してみるとおもしろいでしょう。

*1:Eclipseのインストールディレクトリ