2017年10月10日火曜日

メモ: java 9とleiningenの関係 - 2017/10/10現在

leiningenと同じように-Xbootclasspath/aにclojure 1.8など(1.4以降)のjarを指定して、java 9からclojure.mainを呼んでも起動しない。

[#CLJ-2077] Clojure can't be loaded from the boot classpath under java 9 - Clojure JIRA
https://dev.clojure.org/jira/browse/CLJ-2077

# jarをダウンロード
$ wget 'https://search.maven.org/remotecontent?filepath=org/clojure/clojure/1.8.0/clojure-1.8.0.jar'
# clojure.mainを呼んでみる
$ java -client -Xbootclasspath/a:./clojure-1.8.0.jar \
 clojure.main -e "(println \"hello\")"
# java.sql.Timestampが見つからないと怒られる
Exception in thread "main" java.lang.ExceptionInInitializerError
 ...
Caused by: java.lang.ClassNotFoundException: java.sql.Timestamp
 ...

clojure 1.9 beta1 で対処することになったが、clojure 1.8 までは変更しないことに

# jarをダウンロード
$ wget 'https://search.maven.org/remotecontent?filepath=org/clojure/clojure/1.9.0-beta2/clojure-1.9.0-beta2.jar'
$ wget 'https://search.maven.org/remotecontent?filepath=org/clojure/spec.alpha/0.1.134/spec.alpha-0.1.134.jar'
# clojure.mainを呼んでみる
$ java -client -Xbootclasspath/a:./clojure-1.9.0-beta2.jar:./spec.alpha-0.1.134.jar \
 clojure.main -e "(print \"hello\")"

(clojure1.9からclojure.jarとspec.alpha.jarが必要)

その他の回避策

Java 9 incompatibility · Issue #2149 · technomancy/leiningen
https://github.com/technomancy/leiningen/issues/2149

leinのシェルスクリプトファイルから、BOOTCLASSPATH変数を設定する箇所をコメントアウト

そろそろ設定をスキップできるようになるかも
Release 2.8.0-RC1 · technomancy/leiningen
https://github.com/technomancy/leiningen/releases/tag/2.8.0-RC1
"Support skipping bootclasspath for Java 9 compatibility. (Phil Hagelberg)"

どうしてもbootcalasspath/aを指定したいなら、java 8までか、clojure 1.9 beta1以降 (現在 beta2)を使おう。

0 件のコメント :