Question

Ici, je vérifie la CLASSPATH variable d'environnement daniel @ daniel-laptop: ~ / ps / clojure / projets / anneau tutoriel $ echo $ CLASSPATH
/ Home / daniel / ps / clojure / projets / anneau tutoriel / src

Ici, je vérifie ce que java pense qu'il est. daniel @ daniel-laptop: ~ / ps / clojure / projets / anneau tutoriel $ lein rempl
Clojure 1.1.0 user => (Système / getProperty "java.class.path")
« Src /: cours /: / home / daniel / .m2 / dépôt / 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 / jetée-util-6.1.14.jar: lib / CLJ-html-0.1.0.jar: lib / ring-jetée-adaptateur-0.2.0.jar: lib / jetée-06/01/14 jar: lib / anneau-core-0.2.0.jar: lib / commons-fileupload-1.2.1.jar: lib / servlet-ring-0.2.0.jar: lib / commons-codec-1.4.jar: »

Comme vous pouvez le voir, les deux réponses sont complètement différentes. Je suis sûr que je dois juste être mal compris où je dois être éditer la variable CLASSPATH pour java pour « obtenir », sauf que tout ce que j'ai trouvé dit que cela devrait fonctionner. Alors, quelle est l'affaire? Est-Leiningen spawn son propre bizarre instance de renégats de Clojure? Suis-je Edition d'une variable complètement hors de propos? Toute aide très appréciée.

Était-ce utile?

La solution

$CLASSPATH est en effet tout à fait hors de propos ici. Il est ce que java-la-JVM lance-programme utiliserait si aucune information classpath a été fournie à sur la ligne de commande; Leiningen fournit la machine virtuelle Java appropriée avec un classpath à celui que vous projeter travaillez.

Dans ce cas particulier, "/home/.../ring-tutorial/src" ne serait pas un classpath très utile pour le tutoriel Ring, car il ne comprend que la source du tutoriel Ring et ne comprend pas le pot de Clojure (qui est nécessaire pour exécuter le code Clojure), les pots Ring ( ring est un projet multi-module) ou l'un des autres pots anneau dépend. Le classpath produit par Leiningen peut sembler assez long, mais tous ses composants vraiment besoin d'être là.

Par ailleurs, si vous êtes débutant avec Clojure, je vous recommande de garder vos installations de gestion des classpath toolchain (cela pourrait signifier Emacs + lein swank ou un IDE + le plugin Clojure) si possible. Sinon, il y a beaucoup de questions sur les questions Clojure classpath ici sur SO, en plus d'une multitude d'autres ressources sur le sujet, vous pouvez google pour ... mais maintenant que le soutien de l'outil est assez robuste et vous ne normalement besoin toucher classpath à la main, il est juste la douleur mieux éviter au début.

Autres conseils

Le problème en utilisant la variable CLASSPATH pour gérer vos dépendances est que toutes Java et d'autres langages JVM devront manipuler à leurs fins. Il ne faut pas longtemps avant de vous avoir peint dans le coin.

Il genre de travaux lorsque vous démarrez un serveur qui lance seulement un serveur. Il casse complètement sur un PC d'un développeur Java, qui a 10 années de programmes et projets, tous ont besoin différentes dépendances et est ensuite dépenser plus de temps de débogage des scripts bash pour manipuler la variable CLASSPATH l'écriture du code source.

D'où cette façon de gérer le classpath a obtenu en désuétude, d'autres techniques de préférant chargement de classes, ou lors de l'utilisation du CLASSPATH, en utilisant uniquement très localement.

Le chemin de classe de Clojure est le chemin de classe Java.

$CLASSPATH est ignoré lorsque l'exécutable java est appelé avec l'argument -cp, qui Leiningen (et la plupart des autres scripts de compilation de Clojure) font.

Si vous utilisez un outil de construction tels que Leiningen, vous devez l'utiliser pour gérer le classpath.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top