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-config
はcom.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
を利用して依存関係からパッケージを除外して、上記のあるべき姿になるように設定をする
- プラグイン内で、jacksonに依存していないことが明らかであれば、embulk-util-configでexcludeを入れる必要はない
embulk-util-config
でexcludeをした場合は、明示的にcompileを記述して、上記のパッケージ全部が入るようにすること
だいたいこれで合っています。補足するなら、
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 系で動くこともあるが、保証はない。運。)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-api
とmsgpack-core
以外を、バージョン固定のためにexclude
した場合は、その指定バージョンをcompile "..."
で入れ直すのを忘れてはならない。忘れると、新しい Embulk バージョンでは動かない。 (そのライブラリに必要な依存関係がどこにもないことになるので)