2012-10-25 5 views
6

私はプロジェクトに取り組んでいます、それは統合プロジェクトです、我々はApache CamelとApache Karafを使用しています。プロジェクトで は、私は、だから私は、OSGiバンドルに非OSGIライブラリをラップする方法についての様々な記事やスレッドのかなり多くを読んだが、私は本当に私が得たのかはわからないJira REST Java client library.ライブラリをOSGIfする方法

を使用する必要がありますそれは正しい。

私は、必要なライブラリに依存するPOMファイルを作成しました。パッケージを作り、それをKarafに配備しようとしました、もちろん、Karafは欠落しているパッケージについて不平を言いました。

したがって、対応する依存関係が見つかったので、パッケージは<Import-Package>に入り、<Embed-Dependency>に依存します。

カラフがバンドルにうまくいくまで、もう一度ラウンド、デプロイ、依存関係の検索、追加、...、やり直しを繰り返します。

これは本当に正しいですか?私はかなり狂っているようですので、私はいつものようにそれを持っていないと思います:)

最後に、パッケージは私の仕事用コンピュータにあった安定したものになりました。しかし、奇妙な、私のパーソナルコンピュータでコンパイルされた同じPOM /パッケージが動作していない、再びパッケージの欠落について不平を言いますが、今度はこのパッケージはPOMファイルにあり、パッケージに確実に埋め込まれています。それを見てください。

この欠落しているパッケージは今回はorg.apache.commons.codecです。

org.osgi.framework.BundleException: Unresolved constraint in bundle jiraclient.bundle [134]: Unable to  resolve 134.0: missing requirement [134.0] osgi.wiring.package; (osgi.wiring.package=org.apache.commons.codec) 
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)[org.apache.felix.framework-4.0.3.jar:] 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)[org.apache.felix.framework-4.0.3.jar:] 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)[org.apache.felix.framework-4.0.3.jar:] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1247)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1219)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:1208)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:503)[6:org.apache.felix.fileinstall:3.2.6] 
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)[6:org.apache.felix.fileinstall:3.2.6] 

だから、今、私は完全に混乱しているか、何が間違っている:(

かなりしてください、みんな、私を助けて。ありがとう!

POMファイルが長いので、私はリンクがあると思いますhttp://pastebin.com/j5cmWveG

+0

バンドルをインストールする前にKarafにコモンズコーデックをインストールしましたか?例外は、見つからないパッケージをインポートする必要があることを示します。はい、IMHOは、Felixの例外をエンドユーザーに説明し、その意味をよりよく説明する必要があります。 –

+0

ハロー・クラウス、もう一度お会いできてうれしいです(btw、「キャメル・イン・アクション」の本に感謝します:))。 「コモンズコーデックをインストール済み」という意味ですか?私のKaraf instaceには少なくともバンドルがインストールされアクティブであるようです: karaf @ root> bundle:list | grep codec [246] [インストール済み] [] [80] mvn:コモンズコーデック/コモンズコーデック/ 1.2 これで十分ですか?このバンドルで必要なクラスが公開されていますか?私はバンドルのエクスポートを見つける方法を推測しますが、今は分かりません:( Btw、私はcommons-codecパッケージをライブラリバンドルに埋め込んでいますが、なぜ動作しませんか? – stibi

+1

多分バンドルは明示的に "org.apache.commons.codec"をエクスポートしなければならないので、埋め込まれたjira restライブラリは同じバンドルでそれを使用できますか?それは意味がありますか? – stibi

答えて

9

はいOSGiは、展開モデルの点では使いやすく、MANIFEST.MFファイルのosgiメタデータと100%バンドルが必要です.BNDツールを理解するには数学の博士号が必要です残念ながら、多くのJARはOSGiバンドルではありません。

pom.xmlファイルをすべてのインポート|エクスポートと「理解しにくい」構文で見ると、平均的なエ​​ンジニアがこの「何かがデンマーク" ;例:OSGi!=私たちが住んでいる世界。これは簡単なIMHOでなければなりません。

あなたはラップ URLハンドラ使用KarafでプレーンJARをインストールすることができます:単一のJARファイルにすべてを入れて、あなたには、別のトリックはユーバーのJARを作成することです http://karaf.apache.org/manual/latest/developers-guide/creating-bundles.html

を例にそれを展開することができます。

それはデプロイ時にあなたのために、この狂気の多くを扱うよう代わりにあなたがOSGiのMANIFEST.MFの狂気に対処することで、OSGiの展開が容易になりますFAB(ヒューズバンドル)もあります:http://www.davsclaus.com/2012/08/osgi-deployment-made-easy-with-fab.html

は、
+0

バンドル内でダイナミックインポート*を試すこともできます。これはFelix Bundle Pluginで設定できます。 http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html –

+0

*

+0

これはもっと簡単なものでなければなりません。 – igr

関連する問題