Posted at

Liferay 7 / DXPでサードパーティのライブラリを利用した際に、デプロイできない件の解決方法

More than 1 year has passed since last update.


サードパーティのライブラリを利用した際に、デプロイできない

実際の開発時に、build.gradleに新規ライブラリを追加して、いざLiferayにデプロイしようとすると、依存関係が解決できないので、デプロイできないよ、と言われることがあります。原因としては、jsonicライブラリ内で参照している他のライブラリに、optionalと指定されているためです。そうした推移的依存関係(transitive dependency)が自動的に解決できない場合は、自身で依存関係を解決するためのヒントを、build.gradlebnd.bndに書く必要があるのですが、以下にその方法を示します。

ツールチームのリードデベロッパーであるGreg Amersonが教えてくれた、このチケットLPS-76436を超訳したものになります。

以下ではexternal-lib-webというMVCポートレットを開発しているバンドルで、jsonicライブラリを利用しようとする例で説明します。


Step.1 bnd.bndファイルで、Conditional-packageを利用する。


build.gradle

 dependencies {

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.0.0"
compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"

compileOnly group: "jstl", name: "jstl", version: "1.2"
compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"

compileOnly group:"net.arnx", name:"jsonic", version:"1.3.10"
}



bnd.bnd

Bundle-Name: external-lib-web

Bundle-SymbolicName: com.liferay.sample.test.external.library
Bundle-Version: 1.0.0
Export-Package:\
com.liferay.sample.test.external.library.constants

Conditional-Package: net.arnx.jsonic.*



Step.2 Private-package / Import-Packageで解決


build.gradle

 dependencies {

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.0.0"
compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"

compileOnly group: "jstl", name: "jstl", version: "1.2"
compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"

compileOnly group:"net.arnx", name:"jsonic", version:"1.3.10"
}



bnd.bnd

 Bundle-Name: external-lib-web

Bundle-SymbolicName: com.liferay.sample.test.external.library
Bundle-Version: 1.0.0
Export-Package:\
com.liferay.sample.test.external.library.constants

Import-Package:\
!com.google.inject

Private-Package:\
net.arnx.jsonic



Step.3 それでもうまくいかない場合があったら・・・

その場合は、build.gradlecompileOnlyとなっている部分を、compileIncludeを利用し、Step2, Step3を組み合わせて試してみる、となります。

現在、ツールチームの方でLiferay用のGradleプラグインで、compileConditionalというようなものを開発中なので、それが組み込まれると、推移的依存関係(transitive dependency)はcompileConditionalでまず解決を試みる、という方法になります。