2009-08-05 6 views
8

OSGiコンテナの中に複数のバンドルの中でtrying to share the Struts packagesが入っていると、私はこの問題に遭遇しました。私はバンドル内の依存関係を複製することと、それらの間に新しい依存関係を導入すること(両方のバンドルが内部の依存関係を共有して共有すること)を避けたかったのです。OSGiコンテナ内のバンドル間で、非OSGiライブラリをどのように共有できますか?

Mavenを使用した場合の回答は非常に簡単ですが、そうでない場合でもMavenソリューションを使用して他のメカニズムで同じ結果を作成する方法を学ぶことができます。

このアプローチはプロジェクト中に複数回有効であることがわかりましたので、ここで例を挙げます。

答えて

7

Mavenを使用すると、どのライブラリからでもOSGiバンドルを簡単に作成できます。しかし、他の仕組みでも同じ結果を生み出すことができると思います。 Mavenのソリューションは、どのように動作するのか理解するのに役立ちました。

ライブラリを依存関係とするプロジェクトを作成し、Apache Felix projectmaven-bundle-pluginを使用してプロジェクトをパッケージ化し、Export-Package命令でライブラリパッケージを指定することによって、バンドルを作成します。

<?xml version="1.0" encoding="UTF-8" ?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example.lib</groupId> 
    <artifactId>protobuf-dist</artifactId> 
    <version>2.1.0</version> 
    <name>Google Protocol Buffers OSGi Distribution</name> 
    <packaging>bundle</packaging> 

    <dependencies> 
    <dependency> 
     <groupId>com.google.protobuf</groupId> 
     <artifactId>protobuf-java</artifactId> 
     <version>2.1.0</version> 
     <scope>compile</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
      <Export-Package>com.google.protobuf</Export-Package> 
      </instructions> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

を使用すると、すべての推移的依存関係が束状に巻かれたい場合は、あまりにも、プラグインのbundleall目標を使用します。私は、これはOSGiのコンテナ内で束の間Googleのプロトコルバッファを共有するために使用しました。

プラグインは、依存関係にある既存のOSGiマニフェストを認識し、尊重します。

また、バンドルプラグインを使用してマニフェストを作成し、jarパッケージ化プラグイン(またはjar-with-dependencies組み込みアセンブリ)に、アーカイブセクション経由でそのマニフェストを使用するように指示することもできます。上にリンクされているプラ​​グインのページにその操作方法が示されています。

9

ので、達人に熱心ポートにできない、またはアリ/アイビー

と完全に満足していない人のための追加のパスは述べてタスクを達成するために、その最も簡単な方法は、非OSGiのを有効にすることです、私を見つけましたライブラリをOSGiライブラリに追加するには、マニフェストにすべてのパッケージをエクスポートし、適切な記号名/バージョンを追加します。私はantタスク(あるいは直接のコマンドライン呼び出しでさえ)を通してbndでこれを簡単に行うことができました。多くの一般的なライブラリの "osgi-ified"バージョンを含むrepositoriesもあります。一部のライブラリ(joda-time)は、適切なOSGiマニフェストとともに出荷されています。

+1

多くの一般的なライブラリの "osgi-ified"バージョンを含むリポジトリもあります:SpringSourceは大きなものです:http://www.springsource.com/repository/app/ – Thilo

+0

リンクありがとうございます! – basszero

関連する問題