J'essaie de compiler la source clojure dans un fichier de classe et de l'exécuter en ligne de commande uniquement, sans instruction ni réponse.
J'ai core.clj dans src/hello
annuaire.
.
└── src
└── hello
└── core.clj
Ceci est le code source.
(ns hello.core)
(defn -main
"This should be pretty simple."
[]
(println "Hello, World!"))
en utilisant (compile)
dans REPL.
De l'indice dans ce site (http://clojure.org/compilation), J’ai essayé d’obtenir un fichier de classe à partir de REPL.
J'ai commencé REPL avec lein repl
dans le répertoire src, puis essayé de compiler pour obtenir une erreur.
user=> (compile "hello.core)
CompilerException java.io.IOException: No such file or directory, compiling:(hello/core.clj:1:1)
Ligne de commande
De ce post outil simple pour compiler Clojure .clj en .class / .jar et Comment compiler un fichier dans clojure, il semble que je puisse compiler la source clojure en dehors de REPL.
J'ai essayé ça en .
obtenir une erreur.
> java -cp .:<PATH>/clojure-1.6.0.jar -Dclojure.compile.path=build clojure.lang.Compile src/hello/core.clj
Compiling src/hello/core.clj to build
Exception in thread "main" java.io.FileNotFoundException: Could not locate
hello/core/clj__init.class or hello/core/clj.clj on classpath:
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:411)
...
Donc, voici mes questions:
- Comment puis-je compiler la source clojure pour obtenir la classe avec / sans REPL?
- Comment exécuter la classe avec Java? Est-ce suffisant pour exécuter
java -cp .:CLOJURE_JAR main
?
Réponses:
2 pour la réponse № 1REPL
Lorsque vous appelez REPL, vous devez ajouter un chemin de classe.
java -cp .:<PATH>/clojure-1.6.0.jar:./src clojure.main
Vous devez définir le *compile-path*
avec (set! *compile-path* "build")
.
Ensuite, vous pouvez compiler pour obtenir le fichier de classe.
user=> (compile "hello.core)
hello.core
Ligne de commande
Il y a deux problèmes:
- Pour la compilation, le CP doit inclure le répertoire source.
- Le paramètre n'est pas le chemin du fichier, mais l'espace de noms.
Ceci est d'appeler le compilateur.
clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./src -Dclojure.compile.path=build clojure.lang.Compile hello.core
Compiling hello.core to build
Exécution du fichier de classe
Vous devez indiquer le répertoire où se trouvent les fichiers de classe.
clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./build hello.core
Hello, World!