Equinoxでは、含まれる機能のP2.INFから始まったOSGIバンドルをマークすることは可能ですか?
質問
いくつかのバンドルを含む日食機能があります。 P2に、機能がインストールされたときに開始されたバンドルの1つをマークするように指示したいと思います。これは、バンドル独自のメタINF/P2.INFを使用して可能です。
instructions.configure = markStarted(started: true)
しかし、私はこれをバンドルレベルではなく機能レベルでやりたいと思っています(問題のバンドルはサードパーティであり、可能であれば、いかなる方法でも変更したくない)。
いくつかの研究が私を導きました このドキュメント これは、構成命令を含む機能のP2.INFに移動できることを示唆しています。私はすべての明白なことを試しました、
units.0.id = <bundle symbolic name>
units.0.instructions.configure = \
org.eclipse.equinox.p2.touchpoint.eclipse.markStarted(started: true)
しかし、これまでのところ、私が試した順列のどれも効果がありません。何も起こらないように、バンドルは開始時にマークされておらず、エラーは報告されません)。
どんなポインターも大歓迎です。 Eclipse Equinox Galileo(3.5.2)... Heliosに関連する回答も非常に便利です。
解決
「ユニット。」 p2.infエントリは新しいものを作成します インストール可能なユニット, 、彼らは他の既存のIUを変更しません。
基本的に全体を作成する必要があります インストール可能なユニットフラグメント. 。フラグメントには関連する指示があり、バンドルのIUに取り付けられます。次に、機能からこの新しいIUに要件を追加する必要があります。
PDE/ビルド製品を構築するときにこれを自動的に行います。バンドルの開始レベルを持つ小さなRCP製品ビルドを作成することにより、生成されたP2.INFを見ることができます。
製品ビルドの生成されたP2.INFは次のとおりです buildDirectory/features/org.eclipse.pde.build.container.feature/product/p2.inf
以下は、の開始レベルを設定するビルドから変更した例です。 org.eclipse.equinox.common
. 。 $version$
P2.INFが属する機能のバージョンに置き換えられます。私たちが断片であるバンドルを指定している「Hostrealements」に注意してください。
#create a requirement on the IU fragment we are creating
requires.2.namespace=org.eclipse.equinox.p2.iu
requires.2.name=configure.org.eclipse.equinox.common
requires.2.range=[$version$,$version$]
requires.2.greedy=true
#create a IU frament named configure.org.eclipse.equinox.common
units.0.id=configure.org.eclipse.equinox.common
units.0.version=$version$
units.0.provides.1.namespace=org.eclipse.equinox.p2.iu
units.0.provides.1.name=configure.org.eclipse.equinox.common
units.0.provides.1.version=$version$
units.0.instructions.install=installBundle(bundle:${artifact});
units.0.instructions.uninstall=uninstallBundle(bundle:${artifact});
units.0.instructions.unconfigure=setStartLevel(startLevel:-1);markStarted(started:false);
units.0.instructions.configure=setStartLevel(startLevel:2);markStarted(started:true);
units.0.hostRequirements.1.namespace=osgi.bundle
units.0.hostRequirements.1.name=org.eclipse.equinox.common
units.0.hostRequirements.1.range=[3.6.0.v20100503,3.6.0.v20100503]
units.0.hostRequirements.1.greedy=false
units.0.hostRequirements.2.namespace=org.eclipse.equinox.p2.eclipse.type
units.0.hostRequirements.2.name=bundle
units.0.hostRequirements.2.range=[1.0.0,2.0.0)
units.0.hostRequirements.2.greedy=false
units.0.requires.1.namespace=osgi.bundle
units.0.requires.1.name=org.eclipse.equinox.common
units.0.requires.1.range=[3.6.0.v20100503,3.6.0.v20100503]
units.0.requires.1.greedy=false
質問への回答:
0、1、2
これらの数値はややarbitrary意的であり、プロパティのセットを分離するだけです(
requires
またunits
または何でも)他の人から。requires
ここでは、PDE.BUILDによって生成された大きなP2.INFからコピーし、単位を行ったように変更するのを忘れていたという理由だけで、「2」を使用しました。これはすべて必要ですか?
はい。二番目
hostRequirements
type = bundleで必要です。 Heliosでは、翻訳フラグメントを除き、IUに1つのフラグメントのみを取り付けることができます。通常、すべてのOSGIバンドルのデフォルトの開始レベルを設定するデフォルトのIUが利用可能です。カスタムフラグメントをデフォルトのものよりも選択するためには、満足しているホスト要件の数であるより高い「特異性」が必要です。「インストール」の場合
units.0.instructions.install = installbundle(bundle:$ {artifact}); units.0.instructions.uninstall = uninstallbundle(bundle:$ {artifact});
instructions.install
とinstructions.uninstall
P2プロセスのフェーズを参照してください。installBundle
とuninstallBundle
OSGIの意味でのインストール/アンインストールを参照してください。他のことをする前に、バンドルをOSGIシステムにインストールする必要があります。これにより、基本的にconfig.iniまたはorg.eclipse.equinox.simpleconfigurator/bundles.infoファイルに追加することができます。ほとんどのP2インストールには、バンドルのデフォルトの開始レベル(4)をインストールおよび設定するデフォルトの構成IUが既に含まれています。ただし、現在、各バンドルに1つの構成フラグメントのみを適用できるため、このように独自のバンドルを追加すると、デフォルトはバンドルに適用されなくなります。
HoStrequirements。インストール可能なユニットフラグメントページは、フラグメントが何であるかを説明しています。それはbieflyに言及されています メタデータのカスタマイズ ページですが、説明されていません。
ドキュメント、Wikiにはたくさんのものがあります P2カテゴリ. 。のページ タッチポイントの指示 面白いかもしれません。いくつかの助けがあります help.eclipse.org, 、しかし、一般的に、これはドキュメントがあることについてもう少し前進していると思います。