0

私はたくさん検索しましたが、かなり多くの答えが見つかりました。これは、それが「人気のある」問題であることを示しています...それでも、解決できません。

クラスを正常にコンパイルできます。これを行うために、次の 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...

4

1 に答える 1

0

これは本当に答える必要はありません。パスの展開 (?) や、Java ローダーがパスを読み取る方法に何らかのバグがあるようです...とにかく、今のところ解決されています。

于 2012-05-09T17:35:40.520 に答える