1

私は現在、JBoss 7.1 上の JavaEE 6.0 に基づくサーバー部分と Eclipse RCP 3.7 に基づくクライアントを持つアプリケーションを開発しています。

共有 API 用の単純な OSGi パッケージの場合、バージョンと依存関係の違いにより、すでに問題が発生しています。この APIには、バンドル アクティベーター用に「org.osgi.framework.」が必要であり、slf4j ロギング API 用に「org.slf4j.」が必要です。

現在、私のクライアントは非常にうまく機能していますが、JBoss は OSGi インポートの期待されるバージョンと slf4j のインポートが適合しないことを教えてくれます...

Eclipse と JBoss の間で OSGi バンドルを共有するためのベスト プラクティスはありますか? 単純なインポートおよびエクスポート宣言に戻る必要がありますか?それとも Require-Bundle を使用できますか? JBoss を実行するには、JBoss 用の互換性バンドルを作成する必要がありますか? ここで進める最善の方法は何ですか?

更新 Import-Package のみを使用して問題を解決しました。org.osgi.framework のような依存関係については、それが問題ではないことを説明するために version="0.0" を使用します。:-( あまり安全ではありませんが、現在、別のオプションが見つかりません。より良い方法はありますか?

UPDATE 2 OSGi フレームワークの正しいバージョンを実装するためにも注意を払う必要があります。JBoss 7.1.x には OSGi 4.2 のみが実装されており、タイプセーフなサービス取得はサポートされていません。

4

1 に答える 1

5

ベスト プラクティスは、使用している最小バージョンから次のメジャー インクリメントまでの範囲で import package ステートメントを使用することです。

たとえば、RCP がパッケージのバージョン 1.5 を想定し、JBoss が 1.3.6 を想定している場合、バージョン =「[1.3.6,2)」をインポートします。

Semantic Versioning ホワイトペーパー (pdf)では、このスタイルのインポートが安全で賢明である理由を説明しています。

于 2012-04-29T21:33:42.537 に答える