4

私はNoClassDefFoundError実行時に取得していますが、"uses"推移性が作成されたと思ったので、ディレクティブはこれを回避すると思いました(間違っている場合は修正してください)。これが私の設定です:

Bundle 1 
  Export-package A

Bundle 2 
  Export-package B, uses "A"
  Import-package A

Bundle 3
  Import-package B

ここで、バンドル3がBのクラスを呼び出し、次にAのクラスを呼び出すと例外が発生します。コンソールに基づいて、BundleClassLoaderバンドル3(つまり、それ自体)でクラスを検索しますが、バンドル1では検索されないことがわかります。BNDにバンドル3にAをインポートするように強制すると、すべてが正常に機能しますが、手間がかかりすぎます。何かが足りないような気がします。equinoxは、マニフェストの情報を使用してバンドルクラスパスを設定するべきではありませんか?または、最悪の場合、BNDは3の1への依存関係を検出し、3のマニフェストでパッケージAをインポートするべきではありませんか?

私のバンドルはすべてあり、制約違反activeはありませんuses

4

1 に答える 1

1

バンドル2はAもインポートする必要があります。使用法Aは、私のBをインポートし、Aもインポートするバンドルはすべて私と同じAをインポートする必要があることを示しています。バンドル2はAをインポートしないため、これは機能しません。また、BはAを使用するため、バンドル3はAをインポートする必要があります。BのインポーターはAのユーザーでもあるため、Aをインポートする必要があります。

于 2012-12-14T01:08:51.847 に答える