Target Definitionを利用する
JAM Circle の開発には現在 Target Definition を利用しています。Target Definition とは何かと言うと、開発中のプラグインを載せるターゲットのEclipse環境の定義を記述できるファイルです。ターゲット環境の指定方法は4つあります。
- Directory(FeatureになっていないPlugin用)
- Software Site(更新サイト)
- Instration(展開されたEclipse環境)
- Feature
この中で「Software Site」は更新サイトから読み込む方式を取っています。JAM Circle で利用しているのもこの方式です。この方式の利点と欠点をまとめると、
利点
- 異なるマシン間で同じターゲット環境を構築できる
- Buckminsterというビルドツールでそのまま利用できる
常に最新版を取得できるバージョンが指定されているため、最新版を常に取得できる訳ではないようです。
欠点
- サイトの不調など、更新サイトから読み込めない事がある
といった感じです。
今回 Target Definition を利用したのは、Buckminster の利用のため、という面が強いですが、開発環境をそろえるのは面倒なので、利用されると良いでしょう。
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
