エクスポートされたサードパーティパッケージ
Liferayでは、100以上のサードパーティのJavaパッケージを実行時に提供しています。 com.liferay.portal.bootstrapモジュールは、個々のパッケージを明示的に指定したり、 globを使ってパッケージのグループを指定することで、パッケージをエクスポートします。 たとえば、 7.3.4-ga5の Export-Package 宣言からの抜粋は次のとおりです。
Export-Package:\
...
\
org.aspectj.*,\
\
org.dom4j.*;version='2.1.3',\
\
org.hibernate.*;version='3.6.10',\
\
org.jaxen.*;version='1.1.6',\
\
org.jdom.*;version='1.1.3',\
\
org.json.*;version='20180813',\
\
org.objectweb.asm;version='7.0',\
org.objectweb.asm.commons;version='7.0',\
org.objectweb.asm.signature;version='7.0',\
org.objectweb.asm.tree;version='7.0',\
org.objectweb.asm.tree.analysis;version='7.0',\
org.objectweb.asm.util;version='7.0',\
\
org.slf4j;version='1.7.2',\
org.slf4j.helpers;version='1.7.2',\
org.slf4j.spi;version='1.7.2',\
\
org.springframework.*;version='4.1.9',\
\
...
複数のパッケージは、 org.aspectj.*の*のようにワイルドカード文字を使って指定します。 org.objectweb.asm*パッケージやorg.slf4j*パッケージのようなパッケージのグループは、\文字だけの行で区切られます。
異なるJARから同じパッケージをエクスポートすると、「パッケージの分割」の問題が発生します。 これにより、定義ができない問題が発生する可能性があります。 そのため、Liferayがエクスポートするパッケージと同じパッケージを持つJARのデプロイは控えてください。
実行時にエクスポートされたパッケージをLiferayに依存する
プロジェクトにコンパイル時にパッケージが必要であるが、実行時にエクスポートされたパッケージをLiferayに依存していることを確認する方法は次のとおりです。
-
プロジェクトが必要とするパッケージが、
com.liferay.portal.bootstrapモジュールのエクスポートマニフェストにリストされているかどうかを確認します。 確認方法は2つあります。Bndソースファイル:Liferayソースコードのコピーがある場合は、
modules/core/portal-bootstrap/system.packages.extra.bndファイルのExport-Package宣言を調べます。 エクスポートされたパッケージは、上記のように分かりやすい形式で表示されています。 Liferayは、この.bndファイルに基づいてcom.liferay.portal.bootstrapモジュールのMETA-INF/system.packages.extra.mfファイルを生成します。JARマニフェスト:
[Liferay Home]/osgi/core/com.liferay.portal.bootstrap.jarのMETA-INF/system.packages.extra.mfファイルは、エクスポートされたパッケージを宣言します。 JARはLiferayのインストールに含まれているので便利ですが、マニフェストファイルのExport-Package宣言の形式はあまり分かりやすいものではありません。 -
プロジェクトが提供されたサードパーティーのパッケージのいずれかを使用している場合は、
providedCompileGradleスコープを使用して、コンパイル時のアーティファクトを依存関係として追加します。providedCompileスコープ内のアーティファクトは、コンパイル時に利用可能ですが、生成されたJARからは除外されます。例えば、Spring Beanのパッケージを使用しているプロジェクトの場合、
providedCompileスコープに以下のアーティファクトの依存関係を指定します。dependencies { providedCompile group: "org.springframework", name: "spring-bean", version: "4.1.9" ... }
これで、Liferayのエクスポートされたサードパーティのパッケージを安全に利用できるようになりました。