Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Last active Jun 16, 2021
Embed
What would you like to do?
embulk dependencies example

ロックファイルのあるべき姿

build.gradleが適切に設定されていれば、以下の行が含まれているはず

javax.validation:validation-api:1.1.0.Final
com.fasterxml.jackson.core:jackson-annotations:2.6.7
com.fasterxml.jackson.core:jackson-core:2.6.7
com.fasterxml.jackson.core:jackson-databind:2.6.7
com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.6.7

理想的ではない設定

依存関係の不適切だと、例えば、以下のようになることがある。

embulk-util-configcom.fasterxml.jackson.core:jackson-databindの2.6.7を利用してようとしているが、 別のライブラリの依存関係の影響で2.6.7の代わりに2.6.7.2が使われることになっている。

+--- org.embulk:embulk-util-aws-credentials:0.4.0
|    +--- org.embulk:embulk-util-config:0.1.1 -> 0.2.1
|    |    +--- javax.validation:validation-api:1.1.0.Final
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.6.7
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.6.7
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.6.7 -> 2.6.7.2 (*)
|    |    \--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.6.7
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.6.7
|    |         \--- com.fasterxml.jackson.core:jackson-databind:2.6.7 -> 2.6.7.2 (*)

このような出力がされる場合にはロックファイルには、以下のように2.6.7ではなく2.6.7.2が記載される。

com.fasterxml.jackson.core:jackson-databind:2.6.7.2

このようになる場合は適切にexcludeを利用して依存関係からパッケージを除外して、上記のあるべき姿になるように設定をする

build.gradleの記述の基本方針

  • プラグイン内で、jacksonに依存していないことが明らかであれば、embulk-util-configでexcludeを入れる必要はない
  • embulk-util-configでexcludeをした場合は、明示的にcompileを記述して、上記のパッケージ全部が入るようにすること
@dmikurube
Copy link

dmikurube commented Jun 16, 2021

だいたいこれで合っています。補足するなら、

Jackson のバージョン

下記 以外 の Jackson 系のライブラリが embulkPluginRuntime.lockfile に入り込んだ場合は (Embulk v0.9.23 でも動かすには) それも 2.6.7 に固定しなければならない。

(Embulk v0.9 系 v0.10.31 以下をあきらめて v0.10.32 (未リリース) 以上や v0.11 (未リリース) のみを対象にするなら 2.6.7 以外でもいい。 2.6.7 以外の Jackson が入っていても Embulk v0.9 系で動くこともあるが、保証はない。運。)

com.fasterxml.jackson.core:jackson-annotations
com.fasterxml.jackson.core:jackson-core
com.fasterxml.jackson.core:jackson-databind
com.fasterxml.jackson.datatype:jackson-datatype-jdk8

Jackson 以外で関連するバージョン

以下が embulkPluginRuntime.lockfile に入り込んだ場合は、どのライブラリから派生してこれらが入り込んだのかを突き止め、 exclude などを駆使して以下のとおりにバージョンを固定しなければならない。

(Embulk v0.9 系 v0.10.31 以下をあきらめて v0.10.32 (未リリース) 以上や v0.11 (未リリース) のみを対象にするなら、これ以外のバージョンでもいい。これ以外のバージョンが入っていても Embulk v0.9 系で動くこともあるが、保証はない。運。)

  • com.google.guava:guava => 18.0
  • org.apache.commons:commons-lang3 => 3.4
  • joda-time:joda-time => 2.9.2
  • org.apache.bval:bval-jsr303 => 0.5

常に exclude して、入れ直してはならないもの

以下が embulkPluginRuntime.lockfile に入り込んだ場合は exclude して、入らないようにしなければならない。

  • org.slf4j:slf4j-api
  • org.msgpack:msgpack-core

バージョン固定のために exclude した場合

上記 slf4j-apimsgpack-core 以外を、バージョン固定のために exclude した場合は、その指定バージョンを compile "..." で入れ直すのを忘れてはならない。

忘れると、新しい Embulk バージョンでは動かない。 (そのライブラリに必要な依存関係がどこにもないことになるので)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment