サードパーティライブラリパッケージの依存関係の解決
アプリケーションは、複数のOSGiモジュールに依存できます。 Javaパッケージの依存関係を解決するのは難しい場合があります。 すべてのパッケージがOSGi JARで配布されるのが理想的ですが、多くのパッケージは従来のライブラリ(非OSGi JAR)にのみ存在しています。 サードパーティの非OSGi JARへの依存関係は、いくつかの方法で解決できます。
-
Eclipse Orbit や ServiceMixバンドル などのプロジェクトは、何百もの従来のJavaライブラリをOSGiモジュールに変換します。 パッケージを含むOSGi JARが見つかる場合があります。
パッケージを含むモジュールを見つけたら、それをデプロイし、それに
compileOnly
依存関係を追加します。 パッケージのモジュールがない場合は、次の手順に進みます。 -
使用しているライブラリパッケージをLiferayがすでにエクスポートしているかどうかを確認します。 Liferayがそれらをエクスポートしている場合は、エクスポートされたサードパーティパッケージの指示に従って依存関係を調整してください。
-
非OSGi JARを
compileInclude
依存関係として追加します。dependencies { compileInclude group: 'org.apache.shiro', name: 'shiro-core', version: '1.1.0' }
Liferayの
compileInclude
構成は推移的です—ライブラリとそのすべての依存関係をモジュールJARのlib
フォルダに埋め込み、JARをモジュールのBundle-ClassPath
マニフェストヘッダに追加します。notecompileInclude
構成は推移的な オプションの依存関係 をダウンロードしません。 オプションの依存関係からのパッケージが必要な場合は、別のサードパーティライブラリパッケージと同じようにパッケージを解決してください。 -
モジュールをコンパイルします。
-
モジュールをデプロイし、未解決のパッケージの依存関係を確認します。
-
モジュールが使用していないパッケージに未解決の依存関係がある場合は、そのパッケージのインポートをブロックします。
Import-Package:\ !foo.bar.baz,\ *
!
文字は、パッケージのインポートを無効にします。*
文字は、モジュールが明示的に参照するすべてのパッケージを表します。*
をリストの最後に置くと、Bndはモジュールが参照するすべてのパッケージをインポートします。
WARファイルにLiferayがすでにエクスポートしているサードパーティパッケージとは異なるバージョンが必要な場合は、Import-Package:
リストでそのパッケージを指定してください。 そのパッケージがOSGiモジュールにある場合は、それをデプロイします。
Liferay DXPはWARをデプロイするときに、それを WAB に変換し、デプロイ時にWABからすでにエクスポートされたサードパーティのJARを取り除きます。 Liferayがエクスポートしているものとは異なるバージョンを強制的にデプロイするには、そのパッケージの非OSGi JARの名前をWABジェネレータが除外するJARとは異なる名前に変更し、プロジェクトに そのJARを埋め込む 必要があります。
非OSGi JARからのパッケージへの依存関係を解決しました。