2

パッケージタイプを変更せずにOSGiメタデータを既存のプロジェクトに追加するで説明されているように、maven warプラグインを使用して戦争を構築し、bndプラグインを使用してそれをオーバーレイするという問題があります。 このプロジェクトは、次の依存関係を定義します。

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.12</version>
    </dependency>

ビルドを実行すると、MANIFEST.MF に次のエントリが生成されます

Import-Package: .., javax.ws.rs.core,  ..

バージョンを 1.13 以降に変更するとすぐに、Import-Package エントリは次のようになります。

Import-Package: .., javax.ws.rs;version="[1.1,2)", ..

私のターゲットにはjavax.ws.rs.javax.ws.rs-api_2.0.0.m16が含まれているため、これは私にとって本当の問題になります。これにより、バージョンが不要な場合のインポートが解決されますが、範囲制限がある場合はインポートが停止します。

だから、私の一般的な質問は: bnd はそのバージョン範囲をどのように決定するのですか? 2 つのマイナー リリース間で、バージョン制限なしからその特定の範囲に移行するために何かが変更されたため、bnd がその決定を行う方法を理解することは、この特定の問題が何であるかを発見するのに役立つと思います。

4

1 に答える 1

9

Bnd は OSGi Semantic Versioning を使用します --ホワイトペーパー(PDF リンク) をお読みください。

まず、bnd は、ビルド時に使用されたパッケージのバージョンを特定します。ビルド パスにあった JSR311 API Jar には、バージョン管理されたExport-Packageステートメントが含まれている必要があり、これは適切であり、そのバージョンは 1.1 である必要があります。したがって、バンドルで使用できるパッケージの最低バージョンは 1.1 です。

セマンティック バージョニングでは、メジャー (つまり最初の) セグメントがインクリメントされて、すべてのユーザーの重大な変更を示します。javax.ws.rsしたがって、バンドルはパッケージのバージョン 2.* と互換性がありません。したがって、bnd は 2 までの範囲を生成しますが、2 を含まない... つまり、[1.1,2).

なぜこれが問題を引き起こすのかわかりません。ターゲットに呼び出されたバンドルをデプロイしたいと述べましたjavax.ws.rs.javax.ws.rs-api_2.0.0.m16が、それはファイル名のように見えます。javax.ws.rsバンドル内のパッケージがバージョン 2 であるかどうかを確認しましたか? バージョン 1.* の場合は使用できます... バージョン 2.* の場合は、パッケージに重大な変更が含まれていることを意味するため、使用しないでください。最後に、パッケージのバージョンが 2.* であるが、実際には重大な変更ではない場合、そのバンドルを作成した人は失敗したため、私がリンクした PDF に戻って読む必要があります。

于 2013-05-17T01:02:23.920 に答える