2024年Clojure状态调查! 中分享您的想法。

欢迎!请查看关于页面了解如何使用本服务。

0
REPL
已重新分类

我根据以下说明安装了 clojure
https://clojure.org/guides/getting_started#_installation_on_linux

然而,当我在 ~ 目录启动 repl 时,会出现以下

Exception in thread "main" java.lang.IllegalStateException: Attempting to call unbound fn: #'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 home: /usr/share/maven
Java version: 11.0.11, vendor: Debian, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_IN, platform encoding: UTF-8
OS name: "linux", version: "4.19.0-17-amd64", arch: "amd64", family: "unix"

:~$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.11+9-post-Debian-1deb10u1, mixed mode, sharing)

4 个回答

+1

选中
 
最佳答案

您在 ~ 中有 src 文件夹吗?如果是,里面有什么?(我想知道您是否有 src/user.clj,并且该脚本中的某个东西导致了崩溃)

:~$ ls -al src/
total 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/
total 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
:~$ ls -al /usr/local/lib/clojure/libexec/
总数 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
这或许能帮您理解……希望如此……如果您做到了,也请帮助我理解……

:~$ 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#
src/clojure 里面有什么?那就是导致您出问题的原因。

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

将那个 src 文件夹重命名为 source,我敢打赌您的问题就会消失(您可能需要使用 clj -Sforce 来获取 REPL,以强制重新计算类路径缓存等)。

编辑
我将实践放在 ~/src 目录下,所以 ~/src/clojure 会有我的 clojure 相关实践程序。

你说得对... 我已将 "src" 重命名为 "source",并且的确有一个 REPL 在那里...

:~$ clj
Clojure 1.10.3
user=>

赞一个....

不过我有些好奇,任何包含 "src" 文件夹的目录,尝试在该目录下启动 clj 都会发生这种情况吗?我已在本栈overflow上提出相同的问题,并希望将该回复作为答案链接...
好吧,当你有一个 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 文件夹(以及,通常是测试文件夹——但你可以通过别名将其添加到路径中,例如 clj -A:test,而 :test 别名将包含 :extra-paths ["test"] ——现在 Clojure 将同时检查 src 和测试文件夹。
0

你好,

  • 你能提供在~目录和~/src目录下which clj命令的输出吗?

  • 你能提供env命令的输出吗?

:~$ 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=...
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=...
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=...
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=...
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

你能否在~目录下创建新目录?(特别是,~/.cpcache)我们知道不能这么做可能会引起问题,不确定这在本例中是否适用。[https://clojure.atlassian.net/browse/TDEPS-119](https://clojure.atlassian.net/browse/TDEPS-119)

by
试着不使用exec
by
静默退出...
by
exec会将当前进程(你的终端shell)替换为启动的java进程,因此你不希望从命令行执行这个操作。但你确实在那里得到了repl。

我无法解释你所看到的。可能和bash本身或者家目录的权限有关,但我不确定具体是什么,或者如何进一步调试。
by
并不是在我的机器上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 home: /usr/share/maven
Java version: 11.0.11, vendor: Debian, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_IN, platform encoding: UTF-8
OS name: "linux", version: "4.19.0-17-amd64", arch: "amd64", family: "unix"


:~$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.11+9-post-Debian-1deb10u1, mixed mode, sharing)
...