機能を通じて公開されているパッケージに依存する OSGI バンドルがあります。私が依存しているパッケージには、特定のバージョンのバンドルが必要com.company.antlr.runtime (3.0.1)
です。この機能は、バンドルの 2 つのバージョンをパッケージ化しcom.company.antlr.runtime (3.0.1)
、com.company.antlr.runtime (3.2.0)
.
問題は、バンドル (フィーチャー内) と依存するパッケージを含むフィーチャーを使用して Eclipse でフィーチャー・ベースの起動構成を作成すると、必要なバンドルcom.company.antlr.runtime(3.0.1)
が欠落していることを示す欠落制約検証エラーが発生することです。
機能の起動にバンドルとして追加com.company.antlr.runtime (3.0.1)
しても効果はありません。同じ検証エラーが引き続き発生します。
一方、機能にパッケージ化されているものとまったく同じバンドルを含むバンドル ベースの起動構成を作成した場合、検証の問題はありません。
この問題は、次の最小限の例で説明できます。
バンドルorg.example.examplebundle
にはマニフェストがあります。
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name:Examplebundle
Bundle-SymbolicName: org.example.examplebundle
Bundle-Version:1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.company.antlr.runtime;bundle-version="[3.0.1,3.0.1]"
機能org.example.examplefeature
には feature.xml があります。
<feature
id="org.example.examplefeature"
label="Examplefeature"
version="1.0.0.qualifier">
<plugin
id="org.eclipse.osgi"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.example.examplebundle"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.company.antlr.runtime"
download-size="0"
install-size="0"
version="3.0.1"
unpack="false"/>
<plugin
id="com.company.antlr.runtime"
download-size="0"
install-size="0"
version="3.2.0"
unpack="false"/>
</feature>
この機能だけで機能ベースの起動を行うと、検証エラーが発生します。機能に含まれる 4 つのバンドルを使用してバンドル ベースの起動を行っても、検証エラーは発生しません。
次に、コンソールを使用するために必要なバンドルを追加し、機能からバンドルを削除してorg.example.examplebundle
から、org.example.examplefeature
機能ベースの起動を使用して実行してみました。その後、バンドルcom.company.antlr.runtime (3.0.1)
がまったく開始されていないことに気付きました。
同じ必要なバンドルをバンドル ベースの起動に追加すると、 と の両方 com.company.antlr.runtime (3.0.1)
がcom.company.antlr.runtime (3.2.0)
アクティブになっていることがわかります。
これに基づく私の推測では、機能ベースの起動のリゾルバーは、バージョン番号が最も高いバンドルで十分であると結論付けているため、古いバージョンはまったく起動しません。
com.company.antlr.runtime (3.0.1)
その仮説を念頭に置いて、feature.xmlに次のスニペットを含めることで、完全に一致する必要があることを feature.xml で明示的に述べようとしました。
<requires>
<import
plugin="com.company.antlr.runtime"
version="3.0.1"
match="perfect"
/>
</requires>
しかし、残念ながら、役に立ちませんでした。
それで、私の質問は次のとおりです。機能ベースのリリースを維持しながら、この問題を解決する方法はありますか?
完全を期すために:Eclipse Kepler 4.3およびOSGI 3.8.1を実行しています