2011-07-21 20 views
27

Estoy usando Leiningen (por primera vez) para administrar una aplicación de mi escritura. Hasta el momento he definido las dependencias del proyecto, he instalado deps en el directorio lib del proyecto y he definido una función. Cuando ejecuto lein repl desde la raíz del proyecto y luego llamo a la función que he definido, obtengo el error unable to resolve symbol. ¿Alguien sabe lo que estoy haciendo mal y cómo ejecutar correctamente mi aplicación a través de Leiningen? Gracias.¿Cómo ejecutar código con Leiningen?

Respuesta

29

desde la leiningen repl tendrá que cambiar al espacio de nombre con el que se definió su función con la macro in-ns.

(in-ns 'myproject.core) 

entonces la función debe estar disponible
usted podría también use ese espacio de nombres a partir de la réplica de incluirlo en el espacio de nombres por defecto (usuario).

(use 'myproject.core) 

después de que es posible que desee considerar el mirar en los lein run, lein uberjar y lein jar tareas Leiningen.

+0

No tenía conocimiento de 'lein run', ¿me puede indicar dónde puedo encontrar la información de mroe? He establecido ': main' en el espacio de nombres de mi proyecto, pero estoy teniendo dificultades para usar' lein run' con argumentos; Obtengo continuamente 'Exception in thread' main "java.lang.NullPointerException (NO_SOURCE_FILE: 1)' – sjac

+1

Si ejecuta 'lein help' (o incluso' lein' solo) se muestra una lista de comandos. Puedes cavar más profundo con el nombre del comando; por ejemplo: 'lein help run' – Scott

16

En mis proyectos, por un archivo core.clj que contiene un espacio de nombres define así:

(ns my-project.core) 

... puse la llave :main en el mapa de Leiningen defproject en project.clj:

(defproject my-project "1.0.0-SNAPSHOT" 
    :description "My project description" 
    :dependencies [[org.clojure/clojure "1.2.1"]] 
    :main my-project.core) 

Así que cuando corro lein repl, mi espacio de nombres del núcleo se carga automáticamente, y veo esto:

mac:my-project scott$ lein repl 
REPL started; server listening on localhost:31515. 
my-project.core=> 
+1

Si tuviera que usar': main', ¿se realiza automáticamente el reemplazo del código de programación? – sjac

+7

No estoy seguro de si está preguntando si el Leiningen busca automáticamente los cambios de archivos y los carga en su REPL en vivo, pero no hace eso. Sin embargo, en lugar de reiniciar el REPL, puede ejecutar lo siguiente para cargar el último código: '(use: reload-all 'my-project.core)' – Scott

Cuestiones relacionadas