サードパーティのフレームワークにOSGiバンドルを読み込むのに問題があります。存在しないImport-Packageのバージョンを指定しているので、私のバンドルを拒否し続けます。バンドルに必要なバージョンをロードしていることはわかっていますが。この問題を回避するために、一時的にバージョン要件を無効にしましたが、少し醜いです。OSGIインポートパッケージ:バージョン対バンドルバージョン - 違いは何ですか?
Import-Package: com.ghc.ghTester.expressions,org.apache.ws.security;vers
ion=0,org.apache.ws.security.components.crypto;version=0,org.apache.ws.
security.message;version=0,org.apache.ws.security.message.token;version
=0,org.apache.ws.security.processor;version=0
私は私の依存関係のためのマニフェストを見ると、私は次を参照してください。
Bundle-Version: 1.5.11
Bundle-ClassPath: wss4j-1.5.11.jar
Bundle-Vendor: Apache
Export-Package: org.apache.ws.axis.security,
org.apache.ws.axis.security.handler,
org.apache.ws.security,
org.apache.ws.security.action,
org.apache.ws.security.components.crypto,
org.apache.ws.security.conversation,
org.apache.ws.security.conversation.dkalgo,
org.apache.ws.security.handler,
org.apache.ws.security.message,
org.apache.ws.security.message.token,
org.apache.ws.security.processor,
org.apache.ws.security.saml,
org.apache.ws.security.transform,
org.apache.ws.security.util
Frameworkのチームに不満をした後、彼らは私が私のImport-Package
にbundle-version
なくversion
を使用する必要があることを私に言ってきました以下のような文:
Import-Pacakge: org.apache.ws.security;bundle-version=[1.5.0,2)
私はOSGi Specs (page 50)を読みましたが、 に見えることはできません
開発者は、任意の一致属性を指定することができます。輸出の パッケージのバージョンを選択するには、バージョン範囲 -
•バージョン:以下の任意のマッチング属性が事前に定義されている 58ページ マッチング属性を参照してください。構文は、36ページの「バージョン範囲」に従わなければなりません。 バージョン選択の詳細については、セマンティックバージョン管理( )を参照してください。この属性を指定しないと、[0.0.0、∞]とみなされます。
•specification-version - この属性は、以前のバージョンからの移行を容易にするためにのみ、バージョン属性 のエイリアスです。バージョン属性が の場合、値は等しくなければなりません。
•bundle-symbolic-name - エクスポートする バンドルのバンドル記号名。フラグメントバンドルの場合、これはホスト バンドルのシンボリック名になります。
•bundle-version - エクスポートするバンドルのバンドルバージョン を選択するバージョン範囲。デフォルト値は [0.0.0、∞]です。セマンティックバージョニング(54ページ)を参照してください。 フラグメントバンドルの場合、バージョンはホストバンドルからのものです。
version
とbundle-version
の違いを明確にしてもらえますか?私がドキュメントを読む方法から、バンドルバージョン(つまりマニフェストのBundle-Version
)はバンドル内のすべてのパッケージに拡張されます。だからパッケージのバージョン(すなわち:バージョン)は、Import-Package
ステートメントのbundle-version(すなわち:bundle-version)と同じではないでしょうか?なぜ2つの異なる方法を指定できるのでしょうか?
だからどこで/どのようにパッケージのバージョンを指定しますか?マニフェストに、それがどのバージョンであるかを示すステートメントがありますか?またはpackage-info.javaファイル内にありますか? –
私の更新を見てください。バンドルのソースでは、 'package-info.java'にバージョンを指定できますが、ビルド済みのバイナリバンドルを使用しているようです。その場合、エクスポートのバージョンはMANIFEST.MFの 'Export-Package'ヘッダーによって純粋に定義されます。バンドルはバージョンを指定していないので、すべてのバージョンは0です。 –
私はそれに従うと思います。私が使用しているフレームワークでは、あらかじめ構築されたバイナリ(例:Apache WSS4j 1.5)を取り出し、マニフェストのエントリを介してパッケージを公開するマニフェストを書き直したようです。だから私がバンドル版への依存を変えたいのであれば、この特定のフレームワークを対象とした真のOSGi環境では技術的に正しいとは言えませんが、正しく動作するはずです。指定したbundle-versionが公開するすべてのパッケージを基本的に示しますか?それは正確ですか? –