JRubyをOSGi extensionにしたかったんだ・・・。
OSGiの仕様にはExtension BundleといってOSGi自体の機能を拡張するためのBundleがあります。Equinoxにも実装されており、これを利用すればこんな事も実現できるんじゃないか?と想像していたものがありました。それは、JRubyなどのJVM上で動く言語をOSGi extensionにすれば、Eclipse PluginもJava以外の言語で開発ができるのではないか、と言う事。ただそれは設定すればできそうな見通しはたったのですが、p2とセキュリティの仕様のためか、インストールすれば自動で設定を行う仕組みにはなっていないようです。調べた事のメモを残しておきます。
設定方法
configuration/config.iniのosgi.framework.extensionsにJVM言語Bundleを追加する
これだけです。
これを自動的に設定しようとしたけどダメだった
p2にはtouchpointという仕組みがあります。touchpointとは何かというと、一言でいうと、p2からインストールやアンインストールなど操作の最中、ファイルのコピーや設定をp2.infに書く事で実現する仕組みです。例えばあるfeatureをインストールしたときに、更新サイトを登録したいのであれば、そのfeatureのfeature.xmlがおいてある場所にp2.infを作成して下記のように書きます。
instructions.configure=\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:http${#58}//kompiro.org/jamcircle/daily/p2,name:JAMCircle Daily build,enabled:false);
#58は「:」の置換文字です。 instructions.${phase}名で、"org.eclipse.equinox.p2.touchpoint.eclipse.addRepository"がコマンド、後はコマンドの引数を指定しています。phaseはinstallやuninstallなど、イベントを記述しますが、いつ何が起こるのかはhelpに書かれていないのでわかりません:)
このtouchpointの中にはsetProgramPropertyという、Eclipse起動時にシステムプロパティに値を追加するtouchpointがあるので、これを利用してosgi.framework.extensionsを設定できないか試してみました。しかし、osgi.framework.extensionsは、Equinoxではorg.eclipse.osgiに対するfragmentという位置づけがなされているため、p2の中でorg.eclipse.osgiのfragmentのBundleを自動的に追加するようになっています。なので、JRubyのBundleをorg.eclipse.osgiのfragmentにしてみましたが、自動的に追加されるのはJARに固まっているものでないとうまく動かないと。JRubyの中のrubyのコードやらコマンドやら使えなくないのです。なのであきらめました。
なんかもったいない結末なのでログを取っておきます。
参考サイト
- touchpointのソースコード : org.eclipse.equinox.p2.touchpoint プラグイン
- Eclipse Help: touchpoint一覧
- Eclipse Help: p2.infについて
- org.framework.extensionsの設定について

rss
