私はプロジェクトに取り組んでいます、それは統合プロジェクトです、我々は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
バンドルをインストールする前にKarafにコモンズコーデックをインストールしましたか?例外は、見つからないパッケージをインポートする必要があることを示します。はい、IMHOは、Felixの例外をエンドユーザーに説明し、その意味をよりよく説明する必要があります。 –
ハロー・クラウス、もう一度お会いできてうれしいです(btw、「キャメル・イン・アクション」の本に感謝します:))。 「コモンズコーデックをインストール済み」という意味ですか?私のKaraf instaceには少なくともバンドルがインストールされアクティブであるようです: karaf @ root> bundle:list | grep codec [246] [インストール済み] [] [80] mvn:コモンズコーデック/コモンズコーデック/ 1.2 これで十分ですか?このバンドルで必要なクラスが公開されていますか?私はバンドルのエクスポートを見つける方法を推測しますが、今は分かりません:( Btw、私はcommons-codecパッケージをライブラリバンドルに埋め込んでいますが、なぜ動作しませんか? – stibi
多分バンドルは明示的に "org.apache.commons.codec"をエクスポートしなければならないので、埋め込まれたjira restライブラリは同じバンドルでそれを使用できますか?それは意味がありますか? – stibi