2011-12-01 12 views
19

Tengo varios proyectos de leiningen separados que aparentemente podrían depender uno del otro.¿Cómo puedo configurar Leiningen para trabajar con múltiples proyectos?

Ejemplo:

~/projects/mywebapp (my own project) 
~/projects/noir  (a clone of the github repo) 
~/projects/clojureql (a clone of the github repo) 

quiero tener a todos ellos compilados en la misma JVM al mismo tiempo. Me gustaría ejecutar el git repos reposando edge (tirando nuevos commits/hacer mis propios commits) y no tener que ejecutar lein jar o lein deps y ciertamente no tener que reiniciar el VM si cambio alguno de los proyectos.

Así es un caso de uso:

Después de ejecutar Swank Lein, desde dentro de emacs, conecto a la repl y compilar un archivo de MyWebApp (con C-c-k), que requiere un archivo de noir. Encuentra la versión del archivo en mi directorio de proyectos. Más tarde, abro ese archivo, lo edito y lo compilo (con C-c-k).

Tenga en cuenta que no estoy pidiendo compilación automática cuando hago git pull. Simplemente no quiero tener que reiniciar la JVM o hacer largos procesos de compilación de jar.

¿Esto es posible en leiningen? ¿Cómo puedo configurar esto?

Respuesta

17

¿Esta pregunta del Lein FAQ ayuda?

Q: Quiero cortar dos proyectos en paralelo, pero es molesto para cambiar entre ellos.

A: utiliza una función denominada dependencias de pago. Si creas un directorio llamado checkouts en la raíz de tu proyecto y enlaces simbólicos a otras raíces del proyecto , Leiningen te permitirá hackearlos en el paralelo . Eso significa que los cambios en la dependencia serán visibles en el proyecto principal sin tener que pasar por todo el ciclo de instalación/cambio-proyectos/deps/restart-repl . Tenga en cuenta que esto no es un reemplazo para enumerar el proyecto en: dependencias; simplemente complementa eso para ciclos de cambio más ajustados.

+0

Gracias! Debo haberlo perdido en las preguntas frecuentes. –

+1

Muy útil. Esa información debería estar realmente en la documentación principal. – Glen

3

Si ya está utilizando swank, no necesita dependencias Lein Checkout. Usted puede simplemente C-c C-k su proyecto (que cargará las versiones jarred de noir/lo que sea), y luego busque también su versión local de noir y C-c C-k. Swank envía felizmente todo el código a tu respuesta, ¡y la jvm nunca necesita saber que venía de un lugar diferente!

Aunque solo puedo recomendar esto para pequeños cambios, porque creo que si compila noir.core, que depende de (digamos) noir.internal, clojure cargará la versión en frasco de noir.internal incluso mientras compila el local versión de noir.core. Aun así, es un truco útil en general.

Cuestiones relacionadas