java build clojure maven leiningen

java - leiningen-cómo agregar dependencias para los tarros locales?



build clojure (11)

Quiero usar leiningen para construir y desarrollar mi proyecto de clojure. ¿Hay alguna forma de modificar project.clj para que elija algunos tarros de los directorios locales?

Tengo algunos frascos de propiedad que no pueden cargarse en repositorios públicos.

Además, ¿se puede usar leiningen para mantener un directorio "lib" para proyectos de clojure? Si un grupo de mis proyectos de clojure comparten los mismos jarrones, no quiero mantener una copia separada para cada uno de ellos.

Gracias


  1. Crea un directorio en el proyecto:

    mkdir maven_repository

  2. Agregue jar locales a este repositorio:

    Por ejemplo, este comando agrega el archivo jaad-0.8.3.jar al repositorio 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

  3. Agregue lo siguiente a project.clj

    :repositories {"local" "file:maven_repository"}

  4. Ahora un lein deps regular 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 puede ignorarse, ya que el jar se verificará en el proyecto y no se descargará de Internet.

Fuente original: uso de JAR locales con Leiningen (modificado desde la copia)


Creo que el enfoque "correcto" es crear un Repositorio Maven privado para que pueda almacenar los frascos en un solo lugar y todas sus sucursales, etc. recogerán los cambios. Esto puede ser excesivo para lo que estás haciendo. Tengo curiosidad si estas son una manera más fácil.


Encuentro a lein pom; lein jar; lein install lein pom; lein jar; lein install lein pom; lein jar; lein install funciona bien cuando se desarrollan bibliotecas.

Haga esto en la biblioteca que está siendo desarrollada y su aplicación que lo requiera lo usará sin ninguna :repositories necesarios.

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"]]


La mejor opción es configurar un artefacto JFrog / Nexus privado e implementar sus instantáneas / versiones allí y luego agregar ese artifiactory como repositorios en su project.clj

Otras formas más simples son

HTTP estático El tipo más simple de repositorio privado es un servidor web apuntado a un directorio lleno de archivos estáticos. Puede usar un archivo: /// URL en sus: repositorios para implementar de esa manera si el directorio es local para 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 el siguiente defproject dentro:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]] :repositories [["releases" "scp://somerepo.com/home/repo/"]]

Luego coloque lo siguiente fuera del defproyecto:

(cemerick.pomegranate.aether/register-wagon-factory! "scp" #(let [c (resolve ''org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)] (clojure.lang.Reflector/invokeConstructor c (into-array []))))

También es posible implementarlo en un repositorio usando el transporte scp y consumirlo a través de http si configura nginx o algo similar para servir al directorio del repositorio a través de HTTP.

NB SCP implementa a Clojars ya no son compatibles

La fuente original está aquí https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md


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 proyecto.clj

En línea de comando:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar / -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar / -Durl=file:repo

Y escribo mi proyecto.clj así:

(defproject foo "0.1.0-SNAPSHOT" :dependencies [[org.clojure/clojure "1.4.0"] [local/bar "1.0.0"]] :repositories {"project" "file:repo"})

Espero eso ayude.

[REFERENCIA: gist.github.com/stuartsierra/3062743 ]




Simplemente use : rutas de recursos en su archivo project.clj. Lo uso, por ejemplo, para conectarme a los servidores de Siebel. Acabo de crear un directorio de recursos en mi directorio de proyecto y copié los archivos jar allí. Pero, por supuesto, podrías usar un directorio más genérico:

(defproject test-project "0.1.0-SNAPSHOT" :description "Blah blah blah" ... :resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

A continuación, desde la copia de respuesta , puedo crear instancias de Siebel Data Bean, por ej.

(def sbl (com.siebel.data.SiebelDataBean.)) (.login sbl "siebelServer" "user" "password") ...

Si tiene una versión de Java más nueva, puede usar comodines en la especificación de su ruta como esta para un directorio más general:

:resource-paths ["/tmp/SiebelJars/*"]


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 del file:// ) en el que puede instalar sus file:// jar.



Podrías poner tus jar privados en lib/ y estarían en el classpath para los propósitos de lein swank y similares; esto parece frustrar el uso de una herramienta de administración de dependencias, aunque si 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 quizás tenga cuidado con lein clean .

A medida que la situación se vuelve más compleja, hay un gran número de tarros privados involucrados, evolucionan y es necesario tener en cuenta la información de control de versiones. La idea de Arthur de crear un repositorio privado de Maven puede ser más apropiado.

(El HR significa el punto de corte de la parte específica de Leiningen ... Continúe abajo para obtener información sobre la historia general de herramientas de administración de construcción / dependencia en Clojure land, incluidos algunos enlaces que creo que podrían ser útiles en su situación).

Además, hasta el momento, no existe un acuerdo universal sobre la pregunta de cuál es la mejor herramienta de construcción para Clojure, y Leiningen, al mismo tiempo que adquiere MindShare, también está ganando constantemente en las áreas de características y pulimento, lo que significa, en particular, que aún no está completo. Aquí hay una cita de Stuart Halloway, autor de "Programming Clojure" de Pragmatic Bookshelf: "Mi 2c: Leiningen es un paso importante, pero todavía hay mucho por hacer". Para la publicación completa y una discusión muy interesante acerca de: construir herramientas y cosas por el estilo en el espacio de Clojure, ver Leiningen, Clojure y las bibliotecas: ¿qué me estoy perdiendo? hilo en el grupo Clojure Google. Muchos participantes mencionan específicamente la necesidad de tener dependencias locales no contenidas en repositorios, locales o de otro tipo, y detallan las soluciones que han surgido para dichos escenarios. ¿Tal vez 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 preparada para algunos escenarios complejos. Si crees que esto puede ser cierto para tu caso (y me refiero a que después de considerar la idea del repositorio privado), aquí hay algunos enlaces a alternativas basadas en clojure-maven-plugin tomadas del hilo mencionado anteriormente: polyglot maven , clojure-maven-plugin ; esta publicación del blog tiene como objetivo ser útil para las personas que intentan usar Maven con Clojure. Según recuerdo, Meikel Brandmeyer (también en SO bajo su control en línea de kotarak) usa Gradle (un sistema de compilación Groovy) con un complemento para acomodar Clojure llamado Clojuresque; Nunca lo intenté yo mismo, ya que no sé nada sobre Groovy, pero dice que tiene un muy buen acto de construcción y creo que no tiene nada que ver con maven, algo que es una ventaja en sí mismo. para algunos de nosotros :-)