/ / Compiler la source de clojure en classe (AOT) à partir de la ligne de commande (sans utiliser lein) - java, clojure

Compilez la source de clojure en classe (AOT) à partir de la ligne de commande (sans utiliser lein) - java, clojure

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 № 1

REPL

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:

  1. Pour la compilation, le CP doit inclure le répertoire source.
  2. 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!

Les références