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"]
を明記して問題を回避する事とした。