我搜索了很多,找到了很多答案,这表明这是一个“流行”问题......但是,我无法解决它。
我可以成功编译一个类。为了做到这一点,我有这个 bash 脚本:
#!/usr/bin/env bash
if [[ $CLASSPATH ]] ; then
extra_classpath=""
else
extra_classpath=":$CLASSPATH"
fi
while true ; do
case "$1" in
-cp | -classpath)
extra_classpath=":$2"
shift 2 ;;
--)
shift
break ;;
*)
break ;;
esac
done
java -cp /usr/share/java/clojure.jar:./classes/:./src/"$extra_classpath" \
clojure.main "$@"
这基本上是对 Debian 上默认安装的闭包的翻版,只是将本地目录添加到类路径中。
当我以这种方式启动 REPL 时,我可以这样做:
user=> (compile 'tld.assignment.sum_calculator)
类文件在 ./classes/tld.assignment.sum_calculator 中生成
但我无法加载编译的内容。我尝试使用完全限定的类名作为参数运行此脚本 - 我找不到文件。如果我像这样运行java:
$ java -cp /usr/share/java/clojure.jar:./classes/ \
tld.assignment.sum_calculator 1 2
此外,我立即从 REPL 尝试(load "tld.assignment.sum_calculator")
使用文件扩展名和不使用文件扩展名,用斜杠替换点和前导点并且全部无效 -(load)
总是“成功”,返回 nil 并在那里结束:S
我找不到类定义。我不知道出了什么问题。:(
编辑:
对不起,路径的一个成功排列成功了。我不知道为什么,但是如果我将 ./classes/ 目录与类路径上的 clojure.jar 交换,那么它可以工作...... Java......