「units。#」p2.infエントリは、新しいインストール可能ユニットを作成します。他の既存のIUを変更しません。
基本的に、インストール可能なユニットフラグメント全体を作成する必要があります。フラグメントには関連する指示があり、バンドルのIUに添付されます。次に、機能からこの新しいIUに要件を追加する必要があります。
PDE / Buildは、製品をビルドするときにこれを自動的に実行します。バンドルの開始レベルを持つ小さなrcp製品ビルドを作成することで、生成されたp2.infを確認できます。
製品ビルドで生成されたp2.infは次のようになりますbuildDirectory/features/org.eclipse.pde.build.container.feature/product/p2.inf
これは、の開始レベルを設定するビルドから変更した例ですorg.eclipse.equinox.common
。は$version$
、p2.infが属する機能のバージョンに置き換えられます。「hostRequirements」に注意してください。これは、フラグメントであるバンドルを指定しています。
#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
これらの数値はやや恣意的であり、プロパティの1つのセット(requires
またはunits
その他)を別のセットから分離するためにのみ機能します。ここrequires
では、pde.buildによって生成された大きなp2.infからコピーし、units.0のように変更するのを忘れたため、「2」を使用しました。
これはすべて必要ですか?
はい。hostRequirements
type=bundleの2番目が必要です。Heliosでは、変換フラグメントを除いて、IUにアタッチできるフラグメントは1つだけです。通常、すべてのosgiバンドルのデフォルトの開始レベルを設定するデフォルトのIUを使用できます。カスタムフラグメントをデフォルトのフラグメントよりも選択するには、満たされているホスト要件の数である「特異性」を高くする必要があります。
「インストール」の場合
units.0.instructions.install = installBundle(bundle:$ {artifact}); units.0.instructions.uninstall = uninstallBundle(bundle:$ {artifact});
instructions.install
およびは、p2プロセスのinstructions.uninstall
フェーズを参照します。およびは、OSGiの意味でのインストール/アンインストールを指しますinstallBundle
。uninstallBundle
他のことを行う前に、バンドルをOSGiシステムにインストールする必要があります。これは基本的に、config.iniまたはorg.eclipse.equinox.simpleconfigurator/bundles.infoファイルに追加することを含みます。
ほとんどのp2インストールには、バンドルのデフォルトの開始レベル(4)をインストールおよび設定するデフォルトの構成IUがすでに含まれています。ただし、現在、各バンドルに適用できる構成フラグメントは1つだけであるため、このように独自の構成フラグメントを追加すると、デフォルトはバンドルに適用されなくなります。
hostRequirements。インストール可能なユニットフラグメントページには、フラグメントの作成方法に関するリファレンスがなく、フラグメントとは何かが説明されています。メタデータのカスタマイズページで簡単に説明されていますが、説明されていません。
ドキュメント、wikiにはp2カテゴリの下にたくさんのものがあります。タッチポイントの説明のページは興味深いかもしれません。help.eclipse.orgにはいくつかのヘルプがありますが、一般的に、これはドキュメントがあるものよりも少し進んでいると思います。