Quiero usar leiningen para construir y desarrollar mi proyecto clojure. ¿Hay alguna forma de modificar project.clj para decirle que elija algunos frascos de directorios locales?
Tengo algunos frascos propietarios que no se pueden cargar en repositorios públicos.
Además, ¿se puede usar leiningen para mantener un directorio "lib" para proyectos de clojure? Si varios de mis proyectos de clojure comparten los mismos frascos, no quiero mantener una copia separada para cada uno de ellos.
Gracias
Respuestas:
Podrías poner tus frascos privados
lib/
y estarían en la ruta de clases para propósitoslein swank
y similares; esto parece anular el punto de usar una herramienta de administración de dependencias, aunque si realmente no desea que esas dependencias se administren, podría tratar a Leiningen como una "herramienta de administración de dependencias de código abierto" y tal vez tener cuidado conlein clean
.A medida que la situación se vuelve más compleja, hay una mayor cantidad de frascos privados involucrados, evolucionan y debe tener en cuenta cierta información de versiones sobre ellos, la idea de Arthur de crear un repositorio privado de Maven puede ser más apropiada.
(El HR significa el punto de corte de la parte específica de Leiningen ... Continúe a continuación para obtener información sobre la historia general de herramientas de administración de compilación / dependencia en la tierra de Clojure, incluidos algunos enlaces que creo que podrían ser muy útiles en su situación).
Además, hasta el momento, no existe un acuerdo universal sobre la cuestión de cuál es la mejor herramienta de compilación para Clojure, y Leiningen, mientras gana en la mente compartida, también gana constantemente en las características de las áreas y el pulido, lo que significa, en particular, que aún no está completo. Aquí hay una cita de Stuart Halloway, el autor de "Programming Clojure" de Pragmatic Bookshelf: "My 2c: Leiningen es un paso importante, pero todavía hay mucho por hacer". Para la publicación completa y una discusión muy interesante sobre: construir herramientas y similares en el espacio Clojure, vea el Leiningen, Clojure y bibliotecas: ¿qué me estoy perdiendo?hilo en el grupo de Google Clojure. Muchos participantes mencionan específicamente la necesidad de tener dependencias locales que no estén contenidas en ningún repositorio, local o de otro tipo, y detallan las soluciones que han encontrado para tales escenarios. ¿Quizás podría ver si hay algo allí que pueda resolver su problema ahora / podría resolverlo en el futuro, cuando los conjuntos de características maduren?
De todos modos, es posible que Leiningen no tenga una buena historia lista todavía para algunos escenarios complejos. Si cree que esto puede ser cierto en su caso (y me refiero después de considerar la idea del repositorio privado), aquí hay algunos enlaces a alternativas basadas en maven extraídas del hilo mencionado anteriormente: polyglot maven , clojure-maven-plugin ; esta publicación de blogpretende ser útil para las personas que intentan usar maven con Clojure. Según recuerdo, Meikel Brandmeyer (también en SO bajo su identificador en línea de kotarak) usa Gradle (un sistema de construcción Groovy) con un complemento para adaptarse a Clojure llamado Clojuresque; Nunca lo probé yo mismo, ya que no sé la primera cosa sobre Groovy, pero él dice hacer un acto de construcción muy agradable con él y creo que no tiene nada que ver con maven, algo que es una ventaja en sí mismo. para algunos de nosotros. :-)
fuente
Simplemente use : resource-path en su archivo project.clj. Lo uso, por ejemplo, para conectarme a servidores Siebel. Acabo de crear un directorio de recursos en el directorio de mi proyecto y copié los archivos jar allí. Pero, por supuesto, podría usar un directorio más genérico:
Luego, desde la respuesta de lein , puedo crear instancias de Siebel Data Bean, por ejemplo
Si tiene una versión más reciente de Java, por supuesto, puede usar comodines en la especificación de su ruta como este para un directorio más general:
fuente
Crea un directorio en el proyecto:
mkdir maven_repository
Agregue jar locales a este repositorio:
Por ejemplo, este comando agrega el
jaad-0.8.3.jar
archivo al repositorio de maven:mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository
Agregue lo siguiente a
project.clj
:repositories {"local" "file:maven_repository"}
Ahora un habitual
lein deps
debería funcionar:$ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING
La advertencia se puede ignorar, ya que el archivo jar se registrará en el proyecto y no se descargará de Internet.
Fuente original: uso de JAR locales con Leiningen (modificado desde la copia)
fuente
Encuentro que
lein pom; lein jar; lein install
funciona bien al desarrollar bibliotecas.Haga esto en la biblioteca que se está desarrollando y su aplicación que lo requiera lo usará sin necesidad de
:repositories
foo.Alternativamente,
lein do pom, jar, install
es un poco más conciso.Esto permite llamar a la biblioteca como cualquier otra
:dependencies [[project-name "version"]]
fuente
:dependencies [[project-name "version"]]
lein install
. Construirá el frasco y el pompón para ti.Creo que el enfoque "correcto" es crear un repositorio privado de Maven para que pueda almacenar los frascos en una única ubicación y todas sus sucursales, etc. recogerán los cambios. Esto puede ser excesivo para lo que estás haciendo. Tengo curiosidad por saber si esta es una forma más fácil.
fuente
Es posible que desee utilizar el complemento
lein-localrepo
: https://github.com/kumarshantanu/lein-localrepofuente
Un desarrollo reciente es el
s3-wagon-private
complemento de Phil para Leiningen: https://github.com/technomancy/s3-wagon-privateEsto debería permitirle publicar artefactos en un repositorio remoto privado.
fuente
Ninguna de estas soluciones me funcionó. En su lugar, instalé un repositorio local y usé maven para instalar el archivo jar en el repositorio local, y agregué el repositorio local a mi project.clj
En línea de comando:
Y escribo mi project.clj así:
Espero eso ayude.
[REFERENCIA: https://gist.github.com/stuartsierra/3062743 ]
fuente
Tal vez eche un vistazo a esta respuesta anterior , proporciono instrucciones paso a paso para configurar un repositorio local para el proyecto (al que se accede a través
file://
) en el que podría instalar sus jar.fuente
Pruebe mi solución sobre cómo crear un archivo jar con dependencias http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
fuente
La mejor opción es configurar un artefacto JFrog / Nexus privado e implementar sus instantáneas / versiones allí y luego agregar ese artefacto como repositorios en su proyecto.clj
Otras formas más sencillas son
HTTP estático El tipo más simple de repositorio privado es un servidor web que apunta a un directorio lleno de archivos estáticos. Puede usar una URL file: /// en sus: repositorios para implementar de esa manera si el directorio es local a la máquina en la que se ejecuta Leiningen.
SCP Si ya tiene un servidor configurado con sus claves públicas SSH, el transporte scp es una forma sencilla de publicar y consumir dependencias privadas. Coloque lo siguiente dentro de defproject:
Luego coloque lo siguiente fuera del defproject:
También es posible implementar en un repositorio utilizando el transporte scp y consumir desde él a través de http si configura nginx o algo similar para servir el directorio del repositorio a través de HTTP.
NB Las implementaciones de SCP en Clojars ya no son compatibles
La fuente original está aquí https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
fuente