LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-12-19

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

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

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

前提条件

  • Liferay Workspaceを利用している。
  • Lifeay Workspaceのmodules以下にプロジェクトファイルを作成している。
  • external-lib-webというMVCポートレットを開発しているバンドルで、jsonicライブラリを利用しようとする例で説明します。

Step.1 blade gw resolveを実行してみる。

該当のプロジェクトでblade gw resovleを実行してみると、依存性が解決できていないファイルが表示されるはずです。それでまず依存しているファイルの目星をつけましょう。

Step.2 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.3 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.4 それでもうまくいかない場合があったら・・・

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

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1