十一月
3
土曜日

JDK11で起きるductのREPLエラーを回避する

OpenJDK11を使うようにしたところductを利用したアプリケーションのREPLでエラーが発生するようになった。


lein run lein uberjar は問題無いがREPLを経由した時だけ問題が発生する。

$ lein repl
nREPL server started on port 51448 on host 127.0.0.1 - nrepl://127.0.0.1:51448
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.10.0-beta4
OpenJDK 64-Bit Server VM 11.0.1+13
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (dev)

Syntax error compiling deftype* at (clojure/core/rrb_vector/rrbt.clj:282:1).
Must hint overloaded method: toArray

core.rrb-venctorというベクタの実装ライブラリで問題が出ているようだ。

[CRRBV-18] core.rrb-vector fails on JDK 11 EA builds

同ライブラリへの依存関係を確認する。

$ lein deps :tree

duct/core経由でfippというpretty-printのためのライブラリが使用していた。

[duct/core "0.7.0-beta1"]
  [fipp "0.6.12"]
    [org.clojure/core.rrb-vector "0.0.11"]

core.rrb-vectorの方はCRRBV-18に明記されていないが、0.0.12 で対応済み。
fippの方も既にIssueがあげられ対応されており 0.6.13 でcore.rrb-vector 0.0.12 への依存するように変更されている。

なお2018/11/03現在では core.rrb-vectorがさらに別件で 0.0.13 に上がりそれに追随する形で fippの方も 0.6.14 がリリースされている。


という訳で原因は分かったもののduct側の最新ベータ 0.7.0-beta1 はまだfippのバージョンアップに対応していないため、
当面はductを利用しているアプリケーション側のproject.cljのdependenciesに [fipp "0.6.14"] を明記して問題を回避する事とした。