9572


Clojure1.6と1.7のバージョン間互換についてです。

以下project.cljで依存ライブラリを指定しています。

[code]

    :dependencies [[org.clojure/clojure "1.7.0-beta2"]
                     [compojure "1.3.2"]
                     [http-kit "2.1.16"]
                     [ring/ring-core "1.3.2"]　;; <1>
                     [ring/ring-defaults "0.1.4"]
                     [org.clojure/clojurescript "0.0-3211"] ;; <2>
                     [cljs-http "0.1.30"]
                     [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                     [org.omcljs/om "0.8.8"]]
    
[/code]

現状clojureにはstableなver.1.6とbetaの1.7がありますが、どうやらこの２つは内部のtools.readerに互換性がないようです。上の場合だと1.7依存のclojurescript<1>は動きますが、1.6依存のringサーバー<2>では「read関数に渡す引数の数が違う」という趣旨のエラーが出ます。  
そこで、1.7のreaderを使うclojurescript<1>と1.6以前のライブラリ<2>において、それぞれ内部で使うtools.readerのバージョンを陽に指定する方法はないでしょうか。  
もしくはもっと根本的に、1.6 - 1.7間のreader互換性の問題を解決できる方法はないでしょうか。


CC BY-SA 3.0
2015-04-26T09:04:16.637
9565
2015-04-26T13:57:48.347
2015-04-26T11:36:14.373
9496
9496
question
clojure
Clojureのライブラリとtools.reader


まず、tools.readerはClojureの標準ライブラリではなく、独立したcontribライブラリなので、Clojureのバージョンが1.6なのか1.7なのかというのはここでは関係ありません。  
ring-core 1.3.2が依存しているtools.readerのバージョン(0.8.1)とClojureScript
0.0-3211が依存しているバージョン(0.9.1)に互換性がないことが問題のようです。具体的にはエラーメッセージを見てみないと分からないですが、0.9.0で`read-
string`のアリティが新たに追加されているのでこれが原因と思われます。

対症療法としては以下の3つが考えられるでしょうか。

  * ClojureScriptのバージョンを0.0-3178に下げる
  * ring-coreのバージョンを1.4.0-beta1に上げる
  * `[ring/ring-core "1.3.2" :exclusions [org.clojure/tools.reader]]`する

1つめのClojureScriptのバージョンを下げる方法が一番無難だと思います。バージョンを0.0-3178まで下げると依存するtools.readerのバージョンが0.8.xになるのでread-
stringのアリティの問題は解決されるはずです。ClojureScriptは現在、1週間に1回以上リビジョンが上がるようなペースで開発が進められています。特別な理由がなければ最新版を使う必要もないと思いますが、いかがでしょうか？

2つめは逆にring-
coreのバージョンを上げることで、tools.readerのバージョンをClojureScriptに揃える方法です。ただし、1.4.0はまだbeta1が出たばかりという段階なのであまりお薦めはできません。

3つめは、使用するring-coreおよびClojureScriptのバージョンはそのままに、ring-
coreからtools.readerをexcludeする方法です。ring-
core内でtool.readerを使っているのは`ring.middleware.session.cookie`だけのようなので、この名前空間を使わないのであれば問題なくexcludeできる可能性があります。


CC BY-SA 3.0
2015-04-26T13:57:48.347
9572
2015-04-26T13:57:48.347
496
9565
answer