2024 Clojure现状调查! 中分享你的想法。

欢迎!有关该工作方式的一些更多信息,请查看关于 页面。

0
REPL
分类

我按照以下指示安装了 clojure:
https://clojure.org/guides/getting_started#_installation_on_linux

然而,当我在 ~ 中启动 repl 时,会出现以下异常

线程 "main" 中发生异常 java.lang.IllegalStateException: 尝试调用未绑定函数: #'clojure.main/main

    at clojure.lang.Var$Unbound.throwArity(Var.java:45)
    at clojure.lang.AFn.invoke(AFn.java:28)
    at clojure.lang.AFn.applyToHelper(AFn.java:152)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.lang.Var.applyTo(Var.java:705)
    at clojure.main.main(main.java:40)

如果我将目录更改到任何其他位置,则运行正常

:~/src$ clj
Clojure 1.10.3
user=>

我的操作系统是 Debian Buster (Minimal)... 我尝试查找,但无果...

不清楚以下信息是否有帮助...

:~$ mvn --version
Apache Maven 3.6.0
Maven 家:/usr/share/maven
Java 版本:11.0.11,供应商:Debian,运行时:/usr/lib/jvm/java-11-openjdk-amd64
默认区域设置:en_IN,平台编码:UTF-8
操作系统名称:"linux",版本:"4.19.0-17-amd64",体系结构:"amd64",家族:"unix"

:~$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK 运行环境(构建 11.0.11+9-post-Debian-1deb10u1)
OpenJDK 64 位服务器 VM(构建 11.0.11+9-post-Debian-1deb10u1,混合模式,共享)

4 答案

+1

选中了
 
最佳答案

你的 ~ 目录下有 src 文件夹吗?如果有,里面有什么?(我在想你是否拥有 src/user.clj,可能这个脚本中的某些内容导致崩溃了)

:~$ ls -al src/
总计 48
drwxr-xr-x 12 nalin nalin 4096 Jul 11 16:15 .
drwxr-xr-x 29 nalin nalin 4096 Jul 15 11:32 ..
drwxr-xr-x  2 nalin nalin 4096 Jul 14 17:23 clojure
drwxr-xr-x  3 nalin nalin 4096 Jun 27 20:44 elm
drwxr-xr-x  2 nalin nalin 4096 Jul 11 21:36 erlang
drwxr-xr-x  2 nalin nalin 4096 Jun 30 14:51 haskell
drwxr-xr-x 12 nalin nalin 4096 Jul  9 23:03 klipse
drwxr-xr-x  4 nalin nalin 4096 Feb 14 22:19 lfe
drwxr-xr-x  2 nalin nalin 4096 Mar 25 14:43 lisp
drwxr-xr-x  5 nalin nalin 4096 Jul  3 17:42 mongodb
drwxr-xr-x  2 nalin nalin 4096 Jul 10 20:58 ocaml
drwxr-xr-x  3 nalin nalin 4096 Jul 13 20:53 sml
:~$ ls -al /usr/local/lib/clojure/
总计 20
drwxr-xr-x  3 root root 4096 Jul 13 18:09 .
drwxr-xr-x 15 root root 4096 Jul  9 22:45 ..
-rw-r--r--  1 root root  458 Jul 13 18:09 deps.edn
-rw-r--r--  1 root root 1489 Jul 13 18:09 example-deps.edn
drwxr-xr-x  2 root root 4096 Jul 13 18:09 libexec
by
:~$ ls -al /usr/local/lib/clojure/libexec/
total 14596
drwxr-xr-x 2 root root     4096 Jul 13 18:09 .
drwxr-xr-x 3 root root     4096 Jul 13 18:09 ..
-rw-r--r-- 1 root root 14932202 Jul 13 18:09 clojure-tools-1.10.3.855.jar
-rw-r--r-- 1 root root     2955 Jul 13 18:09 exec.jar
by
这个可能有助于理解……我希望如此……如果你能,也请帮助我理解……

:~$ su
密码
root@ranjan-t410:/home/nalin# cd ~
root@ranjan-t410:~# clj
Clojure 1.10.3
user=>
root@ranjan-t410:~# cd /home/nalin/
root@ranjan-t410:/home/nalin# clj
root@ranjan-t410:/home/nalin#
by
src/clojure 中是什么?那正是导致您问题的原因。

默认情况下,clj/clojure 会查找 src 中的命名空间,由于您有 src/clojure,因此它将对应于以 clojure.something 开头的命名空间。

将那个 src 文件夹重命名为 source,我相信您的问题将会消失(您可能需要使用 clj -Sforce 来获取 REPL,以便强制重新计算类路径缓存等)。
by
编辑 by
我通常将实践放在 ~/src 目录下,因此大部分情况下 ~/src/clojure 将包含我的 Clojure 相关实践程序。

没错……我已经将 "src" 重命名为 "source",而且确实有一个 REPL 在那里……

:~$ clj
Clojure 1.10.3
user=>

恭喜……

不过,我想知道,这种情况是否会在任何包含 "src" 文件夹的目录中发生,并且我尝试在那个目录中启动 clj 的时候呢?我已经在 stackoverflow 上提出了这样一个问题,并希望能够在这里链接你的回答作为答案……
好吧,只要你有 src 目录,并且有一个指向你试图运行的命名空间对应的 Clojure 源文件的路径,这种情况就可能发生。

例如,如果你有 src/elm/test.clj,那么如果你启动了一个 REPL 并执行了 (require '[elm.test]),Clojure 将尝试加载该文件。

如果你有 src/haskell/project/Stuff.hs,并且你启动了一个 REPL 并试图 (require '[haskell.project.foo]),Clojure 将在 src/haskell/project/ 中寻找名为 foo.clj (或 foo.cljc) 的文件。

这是因为 Clojure 项目的通常都有 src 文件夹(以及,很多时候,test 文件夹——但通常你可以通过别名将其添加到路径中,例如,clj -A:test,那么 :test 别名将会有 :extra-paths ["test"] —— 现在Clojure 将在 src 和 test 文件夹中查找。
0

你好,

  • 你能否提供两种情况下 which clj 的输出,即 ~ 目录和 ~/src 目录?

  • 你能否提供 env 的输出?

by
:~$ which clj
/usr/local/bin/clj

:~/src$ which clj
/usr/local/bin/clj


******* ~ 中 env 的输出 *******
SHELL=/bin/bash
WINDOWID=6291469
XTERM_VERSION=XTerm(344)
LANGUAGE=en_IN:en
XTERM_SHELL=/bin/bash
XDG_SEAT=seat0
PWD=/home/nalin
LOGNAME=nalin
XDG_SESSION_TYPE=tty
XAUTHORITY=/home/nalin/.Xauthority
WINDOWPATH=1
HOME=/home/nalin
LANG=en_IN
LS_COLORS=...
INVOCATION_ID=7de1bed7edfb43d2989c032722a9aab6
XTERM_LOCALE=en_IN
XDG_SESSION_CLASS=user
TERM=xterm
USER=nalin
DISPLAY=:0.0
SHLVL=2
XDG_VTNR=1
XDG_SESSION_ID=1
XDG_RUNTIME_DIR=/run/user/1000
JOURNAL_STREAM=9:21181
HUSHLOGIN=FALSE
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
MAIL=/var/mail/nalin
_=/usr/bin/env
OLDPWD=/home/nalin/src

***********************************************

***********************************~/src 中 env 的输出 **********************************
SHELL=/bin/bash
WINDOWID=6291469
XTERM_VERSION=XTerm(344)
LANGUAGE=en_IN:en
XTERM_SHELL=/bin/bash
XDG_SEAT=seat0
PWD=/home/nalin/src
LOGNAME=nalin
XDG_SESSION_TYPE=tty
XAUTHORITY=/home/nalin/.Xauthority
WINDOWPATH=1
HOME=/home/nalin
LANG=en_IN
LS_COLORS=...
INVOCATION_ID=7de1bed7edfb43d2989c032722a9aab6
XTERM_LOCALE=en_IN
XDG_SESSION_CLASS=user
TERM=xterm
USER=nalin
DISPLAY=:0.0
SHLVL=2
XDG_VTNR=1
XDG_SESSION_ID=1
XDG_RUNTIME_DIR=/run/user/1000
JOURNAL_STREAM=9:21181
HUSHLOGIN=FALSE
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
MAIL=/var/mail/nalin
_=/usr/bin/env
OLDPWD=/home/nalin
0
by

您能否在 ~ 中创建新目录?(特别是,~/.cpcache)我们已知无法创建该目录可能引起问题,不确定是否适用于此处。 https://clojure.atlassian.net/browse/TDEPS-119

尝试不带exec运行。
静默退出...
exec将当前进程(您的终端shell)替换为启动的Java进程,所以您不想从命令行执行这个操作。但是,您确实可以得到repl。

我无法解释您看到的内容。可能与bash本身或主目录的权限有关,但我不知道是什么,也不知道如何调试。
我的机器上repl未不可用,除了在~目录之外的其他目录都可以。甚至能在Emacs中运行事物,所以它对我来说不是一个障碍...

我想分享这个消息,以防你们觉得需要执行更多步骤,请告诉我,如果这有帮助,我可以分享执行结果...只是感觉有点尴尬...

你希望我尝试除了bash以外的任何其他shell吗?顺便说一句,我试过"sh -x clojure",但得到了这个...
:~$ sh -x clojure
sh: 0: 无法打开clojure
我认为这并不是shell,但那只是我的直觉而已...
0

我还想了解在 ~/ 中执行 clj -Spath 的输出。显然,Clojure 本身没有被加入到类路径中。如果你有 ~/.clojure/deps.edn 文件,也可以尝试将其移动到一边。

:~$ clj -Spath
src:/home/nalin/.m2/repository/org/clojure/clojure/1.10.3/clojure-1.10.3.jar:/home/nalin/.m2/repository/org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar:/home/nalin/.m2/repository/org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar

我应该尝试删除 ~/.clojure/deps.edn 吗??
不清楚以下信息是否有帮助...

:~$ mvn --version
Apache Maven 3.6.0
Maven 家:/usr/share/maven
Java 版本:11.0.11,供应商:Debian,运行时:/usr/lib/jvm/java-11-openjdk-amd64
默认区域设置:en_IN,平台编码:UTF-8
操作系统名称:"linux",版本:"4.19.0-17-amd64",体系结构:"amd64",家族:"unix"


:~$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK 运行环境(构建 11.0.11+9-post-Debian-1deb10u1)
OpenJDK 64 位服务器 VM(构建 11.0.11+9-post-Debian-1deb10u1,混合模式,共享)
...