1

B1別のバンドルを使用する1 つのバンドルがB2あり、B2次のパッケージをエクスポートします。

  • パッケージa.b.c
  • パッケージa.b.d

ここでの問題はB1、パッケージ abc でいくつかの内部クラスを使用する必要があることです。a.b.c.d.eしかし、その場合、Eclipse は次のエラーをスローします。

The package a.b.c.d.e is used but not imported in manifest.

しかし、私はすでにパッケージB2をエクスポート/B1インポートするようにしました! a.b.c内部クラスを再度挿入する必要があるのはなぜですか?

4

1 に答える 1

4

これは、パッケージが Java でどのように機能するかを誤解しているように見えます。

パッケージは階層的に見えるかもしれませんが、階層化されていません。そのため、パッケージa.b.c.d.eはいかなる意味でも「子」パッケージではありa.b.cません。これらは、名前が異なる 2 つの異なるパッケージです。

したがって、パッケージのクラスを使用した場合は、パッケージa.b.c.d.eをインポートする必要がありますa.b.c.d.e。あなたも輸入したかもしれないという事実a.b.cは無関係です。

以下のコメント/チャットでの議論を要約するために更新します。

  1. 「パッケージ xyz は使用されていますが、マニフェストにインポートされていません」というエラーは、パッケージを に追加する必要があることを意味しImport-Packageます。パッケージはネストされていないため、個々のパッケージをインポートする必要があることに注意してください。

  2. そのパッケージを に追加するとImport-Package解決エラーが発生する場合は、パッケージをエクスポートする既存のバンドルがないことを意味します。問題のパッケージを含むバンドルは、 にリストする必要がありますExport-Package

  3. 結果が "Bundle exports packages which are not in the bundle classpath" というエラー メッセージである場合は、エクスポートを含むバンドルの内容に実際にはパッケージが含まれていません。おそらく、export ステートメントを間違ったバンドルに追加したか、何らかの理由でバンドルの内容からパッケージが誤って省略された可能性があります。これが発生する理由は、使用しているビルド システムによって異なります。

最後に: クラスとパッケージを混同しないでください! パッケージは、OSGi でインポート/エクスポートするものです。パッケージがエクスポートまたはインポートされると、「内部クラス」を含む、そのパッケージ内のすべてのクラスに常に適用されます。

于 2013-03-12T11:02:34.287 に答える