2012-08-11 7 views
7

パッケージをエクスポートするバンドルはどのようにして見つけられますか?パッケージをエクスポートするOSGIバンドルを検索しますか?

私はfelixを使用していますが、「com.test」のような文字列を持っていますが、そのパッケージをどのバンドルにエクスポートするのかはどのように分かりますか?

私はPackageAdminを推奨していませんので、使用したくありません。実際には、各バンドルのExport-Packageヘッダを取得して解析する必要はありません。

アイデア?

答えて

11

Gogoシェルではなく、プログラムでこれをやりたがっているように思えます...少なくとも、私はあなたの質問の文言からそれを仮定します。

特定のパッケージをエクスポートするバンドルが数多くあり、そのパッケージを多数のバンドルから多くのバンドルから使用できるため、特定のパッケージをエクスポートする "実際のバンドル"とは言いません。特定のバンドルを所有していて、どのバンドルがパッケージcom.testを提供しているか知りたい場合は、インポートバンドルの配線Bundle.adapt(BundleWiring.class)を取得してからBundleWiring.getRequiredWires()を使用してバンドルのすべての依存関係のプロバイダを取得できます。そこから

あなただけの、そのワイヤーのプロバイダはあなたが興味のあるバンドルのBundleRevisionBundleCapabilityになり、あなたがしたいパッケージのosgi.wiring.package名前空間のワイヤーを見つける必要があります。

+0

これをやってみたかったと述べている必要がありますこれは基本的に私が探していたものです。私はすべてのバンドルを通過してこれをチェックしなければならないのは残念です。私はフレームワーク上のメソッドを望んでいました。ここにはパッケージがあります。それはどのバンドルがそれを満たすのですか?いずれにしても依存関係を解決しなければならないときに、フレームワークが背後で何をしているのかを考えてみましょう。しかし、とにかく、答えに感謝します。 – Boomah

2

お試しください: exports | grep com.test?

+0

申し訳ありませんが、私はプログラム的 – Boomah

3

の最近のバージョンをApache Felix OSGiコンソールには、特定のパッケージまたはクラスをエクスポートするバンドルをリストする「依存関係検索」プラグインが含まれています。 http://www.6dlabs.com/blog/dklco/2012-05-04/new-cq-55-dependency-finderにいくつかのスクリーンショットがあります(CQ5について言及していますが、プラグインはそれに依存しません)。

管理者レベルで便利だし、あなたはコードでそれを見つけるために必要がある場合は、そのプラグインのソースコードを見て見ることができました

https://issues.apache.org/jira/browse/FELIX-3045

関連する問題