Clojure China

提问:关于lein和clojure的关系

clojure
#1

感觉学习clojure有个无法逾越的鸿沟。废话不多说,直接上图。lein从官方资料来看是个类似marven的工具。在自动安装lein2.7.1时,总会retrieving clojure1.8.0。我知道的知识如下:jvm和clojure在版本上有依赖关系(例如:clojure1.8.0依赖jvm8,估计clojure1.7.0依赖jvm7,clojure1.6.0 and older依赖jvm6和jvm5,最低只支持到jvm5。如果不对请大神指正:grin:)。
问题:
哪位大神知道如何手工指定lein的clojure版本。如果lein版本也与clojure版本有依赖关系。即使用某版本的lein必须使用某版本的clojure。则请大神提供版本映射关系。如lein2.7.1 mapping clojure1.8.0。小弟感激不尽。

问题2:
如上图,lein是安装了的,但每次开repl时都会去检clojure1.8.0。
且不论其FP思想多么深奥,单单鼓捣这玩意儿,就感觉忒打击积极性了。

#2

没在 Windows 上玩过, 一般推荐 Linux 或者 Mac, 如果遇到 Bug 人也多一些 - -
话说我是在 Mac 上用的 Boot 跑的, 下载后会存储在 ~/.m2/ 里边.

#3

我的理解是,

lein, clojure, jvm 三者的版本是相互独立的。

lein首先会根据path里查找jvm(我记得是1.6以上就行)。

通过lein new 新建一个项目后,可以配置project.clj中的:dependencies 指定clojure的版本。

目前lein new 出来的project.clj里默认是[org.clojure/clojure “1.8.0”],所以会retrieving clojure1.8.0,我猜,你出错是网络原因…我在公司里偶尔就会遇到这个蛋疼的问题,在家就不会。要不,你先弄个代理试试?

对了,我用的是mac,可能有点不一样。

#4

贴一个我的~/.lein/profiles.clj的配置,^:displace表示默认情况下使用的clojure版本,反之,如果在某个特定的工程下,leiningen会使用当前目录下的project.clj配置的clojure版本。

;.lein/profiles.clj
{:repl {:dependencies [^:displace [org.clojure/clojure "1.9.0-alpha14"]] }}

当你在命令行输入lein repl的时候,你可以看到:

nREPL server started on port 55416 on host 127.0.0.1 - nrepl://127.0.0.1:55416
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.9.0-alpha14 ;-> 看这里
Java HotSpot(TM) 64-Bit Server VM 1.8.0_45-b14
    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

这些可以从leiningen的官网主页看到,我写过一篇Leiningen Profile的博客,可以参考。


另外,如果你在Windows上,不妨使用git-bash这个工具作为自己的命令行。

#5

感谢各位大神指点,小弟受教了。:slightly_smiling: