フラグメントホストから使用しているパッケージが解決しないのはなぜですか?

OSGiフラグメントは、フラグメントホストのすべてのパッケージにアクセスできます。別のバンドルからインポートする必要はありません。bndは、フラグメントが使用する外部パッケージ(フラグメントホストにあるものも含む)をフラグメントのImport-Package: [package],... OSGiマニフェストヘッダーに追加します。OSGiランタイムにエクスポートされたパッケージの場合は問題ありません。ただし、問題は、bndがホストの内部パッケージ(ホストがエクスポートしていないパッケージ)をインポートしようとする場合です。内部パッケージはUnresolved requirementのままであるため、OSGiランタイムはフラグメントをアクティブ化できません。フラグメントはフラグメントホストのパッケージをインポートすべきではありません。

ホストがエクスポートしていないホストパッケージを明示的に除外して、問題を解決します。

たとえば、次のフラグメントバンドルのJSPは、フラグメントホストバンドルの内部パッケージcom.liferay.portal.search.web.internal.custom.facet.display.contextのクラスを使用します

<%@
page import="com.liferay.portal.search.web.internal.custom.facet.display.context.CustomFacetDisplayContext" %><%@
page import="com.liferay.portal.search.web.internal.custom.facet.display.context.CustomFacetTermDisplayContext" %>

サンプルのホストバンドルはパッケージをエクスポートしていないため、フラグメントバンドルは、以下のようなOSGiマニフェストヘッダーを使用してパッケージのインポートからそのパッケージを明示的に除外することで、そのパッケージのインポートを回避できます。

Import-Package: !com.liferay.portal.search.web.internal.*,*
« フラグメントを使用して行ったJSPオーバーライドが表示されないのはなぜですか?別のデータベースで変更されるソート順 »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています