私はたくさん検索しましたが、かなり多くの答えが見つかりました。これは、それが「人気のある」問題であることを示しています...それでも、解決できません。
クラスを正常にコンパイルできます。これを行うために、次の 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
クラス定義が見つかりません。私は何がうまくいかないのか分かりません。:(
編集:
お騒がせして申し訳ありません。パスの順列が 1 回成功しました。理由はわかりませんが、クラスパス上の ./classes/ ディレクトリを clojure.jar と交換すると、動作します... Java...