サードパーティライブラリパッケージの依存関係の解決
アプリケーションは、複数のOSGiモジュールに依存できます。 Javaパッケージの依存関係を解決するのは難しい場合があります。 すべてのパッケージがOSGi JARで配布されるのが理想的ですが、多くのパッケージは従来のライブラリ(非OSGi JAR)にのみ存在しています。 サードパーティの非OSGi JARへの依存関係は、いくつかの方法で解決できます。
-
Eclipse Orbit や ServiceMix Bundlesなどのプロジェクトは、数百の従来の 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マニフェスト ヘッダーに追加します。注compileInclude構成では、推移的な オプションの依存関係がダウンロードされません。 オプションの依存関係からのパッケージが必要な場合は、別のサードパーティライブラリパッケージと同じようにパッケージを解決してください。 -
モジュールをコンパイルします。
-
モジュールをデプロイし、未解決のパッケージの依存関係を確認します。
-
モジュールが使用していないパッケージに未解決の依存関係がある場合は、そのパッケージのインポートをブロックします。
Import-Package:\ !foo.bar.baz,\ *!文字はパッケージのインポートを否定します。*文字は、モジュールが明示的に参照するすべてのパッケージを表します。*をリストの最後に置くと、Bndはモジュールが参照するすべてのパッケージをインポートします。
WAR ファイルに、 Liferay がすでにエクスポートしているサードパーティパッケージの異なるバージョンが必要な場合は、 Import-Package: リストでそのパッケージを指定します。 そのパッケージがOSGiモジュールにある場合は、それをデプロイします。
Liferay DXP は WAR をデプロイするときにそれを WABに変換し、デプロイ時に既にエクスポートされているサードパーティの JAR を WAB から削除します。 Liferayエクスポートとは異なるバージョンのデプロイメントを強制するには、そのパッケージの非OSGi JARの名前を、WABジェネレーターが除外する JARとは異なる名前に変更し 、 JARをプロジェクトに埋め込みます 。
非OSGi JARからのパッケージへの依存関係を解決しました。