8

私は以下の違いを理解しようとしています

    <dependency>
        <groupId>com.myspace.order</groupId>
        <artifactId>dal</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.myspace.order</groupId>
        <artifactId>dal</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <type>bundle</type>
    </dependency>

dalアーティファクト自体には、バンドルとして指定されたパッケージがあります。

<packaging>bundle</packaging>

dalアーティファクトをデプロイすると、リポジトリにjarとして公開されていることがわかります(マニフェストが含まれています)。この場合、dalへの依存はどうあるべきか。それはタイプバンドルまたはjarである必要がありますか?OSGIを実行している場合は、タイプをバンドルとして指定する方法があると思います。これは正しいです?または、ここでjar依存関係を設定できますか?

4

1 に答える 1

13

Mavenで依存関係を宣言する場合、MavenはOSGi環境の制限を認識しないため、バンドルではなく通常のJarにのみ依存できます。

この質問を参照してください:

Mavenがosgiバンドルの依存関係を見つけられないのはなぜですか?

プロジェクトをコンパイルするときは、OSGi環境についてまだ心配する必要はありません(ただし、そうする必要があります)。たとえば、依存しているバンドルによってエクスポートされていないパッケージを使用しようとしても、文句はありません。その上....

バンドルをOSGiコンテナー内にデプロイしようとするときに、使用する「dal」パッケージへの依存関係を正しく宣言した場合は、もちろんバージョンも含まれます(通常、maven-bundle-pluginに基づいて実行するために残しておく必要があります)。 POMで)、適切なバージョン(またはバージョン範囲)で必要なパッケージをエクスポートするバンドルがコンテナー内にある場合にのみ解決されます。

'dal'はすでにバンドルのように思われるので、バンドルと' dal'を一緒にデプロイする必要があり、すべてが正常に機能します。

ただし、誤って「dal」のプライベートパッケージへの依存関係を追加した場合、Mavenはそれを喜んでコンパイルしますが、OSGiにスローすると、厄介な配線例外が発生します:)

バンドルは、マニフェストにOSGiメタデータ(Bundle-SymbolicName、Bundle-Versionなど)を含む通常のjarであることに注意してください。したがって、OSGiを使用しない場合、バンドルは他のjarと同じように機能します。

しかしとにかく、さらに情報が必要な場合は、次の質問を確認してください。

Maven依存関係における「バンドル」タイプの意味は何ですか?

于 2013-02-17T22:04:17.033 に答える