6

ここで、環境変数CLASSPATH
daniel @ daniel-laptop:〜/ ps / clojure / projects / ring-tutorial $ echo $ CLASSPATH
/ home / daniel / ps / clojure / projects / ring-tutorial/srcを確認します。

ここで、Javaがそれをどのように考えているかを確認します。
daniel @ daniel-laptop:〜/ ps / clojure / projects / ring-tutorial $ lein repl
Clojure 1.1.0 user =>(System / getProperty "java.class.path")
"src /:classes /:/ home / daniel /.m2/repository/leiningen/leiningen/1.1.0/leiningen-1.1.0-standalone.jar:lib/clojure-1.1.0.jar:lib/servlet-api-2.5-6.1.14.jar:lib/ commons-io-1.4.jar:lib / clj-stacktrace-0.1.0.jar:lib / clojure-contrib-1.1.0.jar:lib / ring-devel-0.2.0.jar:lib / jetty-util- 6.1.14.jar:lib / clj-html-0.1.0.jar:lib / ring-jetty-adapter-0.2.0.jar:lib / jetty-6.1.14.jar:lib/ring-core-0.2。 0.jar:lib / commons-fileupload-1.2.1.jar:lib / ring-servlet-0.2.0.jar:lib / commons-codec-1.4.jar: "

ご覧のとおり、2つの応答は完全に異なります。私が見つけたすべてがこれが機能するはずだと言っていることを除いて、JavaのCLASSPATH変数を編集して「取得」する必要がある場所を誤解しているに違いないと確信しています。それで、取引は何ですか?leiningenは独自の奇妙な反逆者のclojureを生み出しますか?完全に無関係な変数を編集していますか?どんな助けでも大歓迎です。

4

3 に答える 3

9

$CLASSPATH確かにここでは完全に無関係です。これはjava、コマンドラインでクラスパス情報が提供されていない場合に-the-JVM-launcher-programmeが使用するものです。Leiningenは、作業中のプロジェクトに適したクラスパスをJVMに提供します。

この特定のケースで"/home/.../ring-tutorial/src"は、Ringチュートリアルのソースのみが含まれ、Clojure jar(Clojureコードの実行に必要)、Ring jar(Ringはマルチ)が含まれていないため、Ringチュートリアルにはあま​​り有用なクラスパスではありません。 -モジュールプロジェクト)またはRingが依存する他のjarのいずれか。Leiningenによって作成されたクラスパスはかなり長いように見えるかもしれませんが、そのすべてのコンポーネントは実際にそこにある必要があります。

lein swankちなみに、Clojureを使い始めたばかりの場合は、可能であれば、ツールチェーンのクラスパス管理機能(Emacs+または一部のIDE+ Clojureプラグインを意味する場合があります)を使用することをお勧めします。それ以外の場合は、ここSOでClojureクラスパスの問題について多くの質問があります。さらに、グーグルで検索できるトピックに関する他の多くのリソースがあります...しかし、ツールのサポートは非​​常に堅牢であり、通常はクラスパスに触れる必要はありません。手、それは最初に避けるのが最善の痛みです。

于 2010-09-03T21:58:39.470 に答える
2

CLASSPATH変数を使用して依存関係を管理する場合の問題は、すべてのJavaおよびその他のJVM言語が目的のためにそれを操作する必要があることです。あなたが隅に自分自身を描いた前にそれは長くはかからない。

これは、サーバーを起動するだけのサーバーを起動するときに機能します。これは、Java開発者のPCで完全に機能します。この開発者は、さまざまな依存関係を必要とする数十のプログラムとプロジェクトを持っており、ソースコードを記述するCLASSPATH変数を操作するためのbashスクリプトのデバッグにより多くの時間を費やしています。

したがって、クラスパスを管理するこの方法は使用されなくなり、他のクラスロード手法を好むようになりました。または、CLASSPATHを使用する場合は、非常にローカルでのみ使用するようになりました。

于 2010-09-03T22:19:58.323 に答える
0

ClojureクラスパスはJavaクラスパスです。

$CLASSPATHLeiningen(および他のほとんどのClojureビルドスクリプト)が行う引数をjava使用して実行可能ファイルが呼び出されると、無視されます。-cp

Leiningenなどのビルドツールを使用している場合は、それを使用してクラスパスを管理する必要があります。

于 2010-09-04T00:43:32.423 に答える