7

私はプロジェクトに取り組んでいます。それは統合プロジェクトです。ApacheCamelとApacheKarafを使用しています。プロジェクトでは、JiraRESTJavaクライアントライブラリを使用する必要があります。

そのため、非OSGIライブラリをOSGIバンドルにラップする方法について、さまざまな記事やスレッドをたくさん読んだことがありますが、それが正しいかどうかはよくわかりません。

そこで、必要なライブラリに依存するPOMファイルを作成しました。パッケージを作成してKarafにデプロイしようとしましたが、もちろん、Karafはパッケージが不足していると不満を漏らしました。

だから、私は対応するMavenの依存関係を見つけ、それを追加し、パッケージはに<Import-Package>、依存関係はにになり<Embed-Dependency>ます。

別のラウンド、デプロイ、依存関係の検索、追加、...そして何度も何度も、Karafがバンドルで問題がなくなるまで繰り返します。

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

最後に、パッケージは仕事用のコンピューターにあった安定した状態になり、すぐにチェックして家に帰りました。そこで続けましたが、奇妙なことに、パーソナルコンピューターでコンパイルされた同じ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

4

1 に答える 1

9

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

すべての imports|exports とその「理解しにくい」構文を含む pom.xml ファイルを見ると、平均的なエ​​ンジニアがこの「デンマークの州で何かが書かれている」ことを理解するのに 5 秒しかかかりません。例えば ​​OSGi != 私たちが住んでいる世界。

ラップURL ハンドラー を使用して、プレーン JAR を Karaf にインストールできます: http://karaf.apache.org/manual/latest/developers-guide/creating-bundles.html

もう 1 つのトリックは、uber JARを作成することです。たとえば、すべてを 1 つの JAR ファイルに入れてからデプロイできます。

OSGi MANIFEST.MF の狂気に対処する代わりに、展開時にこの狂気の多くを処理するため、OSGi の展開を容易にするFAB (Fuse Bundles)もあります: http://www.davsclaus.com /2012/08/osgi-deployment-made-easy-with-fab.html

于 2012-10-26T06:46:52.857 に答える