2012-06-05 18 views
19

Soy nuevo en Clojure y estoy realmente confundido acerca de cómo debo ejecutar los programas de Clojure.forma típica de ejecutar los programas de Clojure

Mi primera pregunta es si cada programa Clojure es un paquete de Leiningen? Si quiero escribir ¿comienzo creando un nuevo proyecto de Leiningen? ¿Hay un programa para ejecutar Clojure similar a Python (es decir, python pyfile.py)

Me doy cuenta de que esto podría ser una pregunta estúpida, pero he estado confundido acerca de esto por un tiempo y los pocos libros/tutoriales que he pasado don Parece que responde esta pregunta correctamente. Hasta ahora, he estado ejecutando código Clojure solo en REPL.

Respuesta

25

Dado que ha encontrado leiningen directamente está en el camino correcto. No es una pregunta tonta porque responderla ayudará a otros a obtener mejores resultados en Google.

  • cada programa clojure debe ser un proyecto Leiningen separada, por lo que se ejecuta lein new project-name para cada uno de ellos.

  • el resultado de la construcción de un proyecto Clojure es lo mismo que un proyecto Java, un archivo JAR que se ejecute con java -jar myproject-standalone.jar por ejemplo

  • Leiningen puede construir un script envoltorio para usted que produce un archivo .sh que simplemente llama a java -jar

  • Cuando ejecuto los programas de clojure en producción en el trabajo, simplemente los revisamos en git y luego llamamos al lein run en el directorio (de hecho, Jenkins lo hace).

+0

¿Cómo se suprime el número de versión en el archivo de destino '.jar'? – nekonari

+2

agregue ': uberjar-name" sample-standalone.jar "' a su archivo project.clj. vea el proyecto de ejemplo: https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L382 –

9

Una cosa a añadir a la excelente respuesta de Arthur Ulfeldt es que Lein crea una project.clj para usted, y su función principal (función donde la ejecución del programa se inicia desde) se puede definir de allí. Por defecto Leiningen crea la función principal de un archivo llamado core.clj Por ejemplo:

(defproject music "1.0.0-SNAPSHOT" 
    :description "A workspace for my music experiments" 
    :dependencies [ 
    [org.clojure/clojure "1.3.0"] 
    [org.clojure/math.combinatorics "0.0.1"] 
    ] 
    :main music.core) 

ahora mi proyecto se puede ejecutar usando:

lein run 

y la función principal de music.core se llevará a cabo.

2

mi escritura del golpe clojure:

#!/bin/sh 

export CLOJURE_EXT=$HOME/.clojure 
export CLOJURE_OPTS="-Xmx1g -server" 

LIBS=$(ls -1 $CLOJURE_EXT/* 2> /dev/null) 
export CLASSPATH=.:$CLOJURE_EXT:$CLASSPATH:"$(echo "$LIBS" | tr \\n :)" 

JAVA=${CLOJURE_JAVA:-java} 
OPTS=${CLOJURE_OPTS:-} 
MAIN=${CLOJURE_MAIN:-clojure.main} 

breakchars="(){}[],^%$#@\"\";:''|\\" 

if [ $# -eq 0 ]; then 
    exec rlwrap --remember -c -b $breakchars \ 
     -f $HOME/.clj_completions \ 
     --history-filename=$HOME/.clj_history --histsize=1000000 \ 
     $JAVA $OPTS $MAIN -i $HOME/.clojure.clj --repl 
else 
    exec $JAVA $OPTS $MAIN "[email protected]" 
fi 

guardarlos en $ HOME/bin/clojure, chmod + x $ HOME/bin/clojure, copia clojure.jar y la biblioteca 3 ª parte en $ HOME/.clojure, puede ejecutar clojure your_program.clj como pyfile.py pitón

5

Para responder a una parte de la pregunta: "¿Hay algún programa para ejecutar Clojure similar a Python?" Realmente puede simplemente ejecutar un script clojure como este (llamado hello.clj):

(println "Hello!") 

así:

clojure hello.clj 

EDIT: Lo que sigue debe trabajar en todos sistemas:

java -jar <path-to-clojure-jar>/clojure.jar hello.clj 

En mi sistema, el archivo clojure.jar se encuentra en /usr/share/clojure/clojure.jar. El comando linux para disparar clojure simplemente ejecuta un comando como el que está debajo de las cubiertas.

+0

¿Funciona esto en todos los sistemas? Sé que la instalación desde aptitude en Ubuntu te da un comando 'clojure', pero no sé si esto es cierto para otras instalaciones. Sería bueno verificar y actualizar aquí. – metasoarous

+0

He actualizado esto, así que debería funcionar en todos los sistemas. – djhaskin987

0

Como una actualización, una forma sencilla de hacer frente a los programas clojure es utilizar leiningen

Si desea ejecutar pequeños scripts clojure, utilice lein-exec

0

Crear un alias en el archivo de .bashrc, o equivalente:

alias clojure="java -jar path/to/clojure-x.x.x.jar"

continuación, puede ejecutar clojure my-file.clj en su terminal.

Cuestiones relacionadas