2017-03-28 8 views
1

OSGiプロジェクトの依存関係に対処する方法とバンドルに変換する方法を示すチュートリアルがたくさんあります。 1日以上の研究の後、私はまだprovidedスコープの依存関係を処理する方法を見つけることができませんでした。OSGiで "提供された"スコープの依存関係を扱う方法

例を挙げておきます。私は現在Dropbox(dropbox-core-sdk 3.0)を使用しており、providedスコープの2つの依存関係(com.google.androidjavax.servlet)を持っています。 maven-bundle-pluginまたはbndのようなテクニックを使用すると、アーティファクトとその推移的な依存関係のみがダウンロードされます。しかし、プロジェクトをOSGiコンテナにインポートするためには、依存関係を提供する必要もあります。 Embed-Dependencyがすべてを含めると言い

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName> 
        <Bundle-Version>${project.version}</Bundle-Version> 
        <Export-Package>*</Export-Package> 
        <Embed-Transitive>true</Embed-Transitive> 
        <Embed-Dependency>*</Embed-Dependency> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

場合でも、依存関係のみ+推移依存関係が瓶である:私はmaven-bundle-pluginを使用して、私のpom.xml

は次のようになります。しかし、私は提供されたスコープのjarファイルもjarファイルに入れたいと思っています。

providedスコープの依存関係をダウンロードする方法はありますか。もしそうでなければ、このような状況にどう対処するのですか?

答えて

1

私はそこにMavenのBNDの専門家に延期しなければならないでしょうが、私はあなたがMavenのビルドを通じて提供の依存関係を含めることができるとは思いません。あなたはバンドルの外でAndroidコンポーネントを使用することはほとんどありませんので、必要なJARを手動でダウンロードしてバンドル(Bundle-Classpath)に配置することはできませんか?

+1

あなたの答えはDavidにありがとうございます。私はosgiで始まるdropboxのような非常に悪いapiを選択しました。なぜなら、それは膨大なライブラリであり、すべてのものに依存しているからです。これらの依存関係をすべて手動で処理することはほとんど不可能です。そのため、私はプロセスを自動化したいのです。 –

+0

私は必要なjarファイルを手動でダウンロードしてバンドルに入れましたが、アンドロイドには何千もの依存関係があります(推移+提供)。私は実際に立ち往生し、さらに進む方法を知らない。 –

+0

Maven BNDのエキスパートが解決策を投稿できる可能性があります。別のアプローチとして、Dropboxプロジェクトを別のJavaプロセスとして実行し、MQTTまたはREST経由でKuraと通信することができます。私はこのアプローチがOSGiアーキテクチャに適合しないアプリケーションに使われているのを見てきました。 –

0

埋め込みたい依存関係の範囲を指定できると思います。 OSGi仕様のjarファイルのようないくつかの依存関係は、決して配備すべきではないことに注意してください。

通常、バンドル内に隠されている依存関係のみを埋め込むことができます。他のバンドルと通信するために必要なパッケージは、展開しない方がよいでしょう。

たとえば、サーブレットapiは通常、使用するhttpserviceバンドルによって提供されます。

は、このオプションを試してみてください:

<Embed-Dependency>*;scope=compile|provided</Embed-Dependency>

+0

ありがとうクリスチャン、私は私の答えを編集しました。 Mavenの設定では、私はすでにすべての依存関係を含める必要があると言いました。 –

関連する問題