Pregunta

Quiero utilizar leiningen para construir y desarrollar mi proyecto clojure.¿Hay alguna manera de modificar project.clj para indicarle que elija algunos archivos jar de los directorios locales?

Tengo algunos archivos jar propietarios que no se pueden cargar en repositorios públicos.

Además, ¿se puede utilizar 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

¿Fue útil?

Solución

Podrías poner tus frascos privados en lib/ y estarían en el classpath para los propósitos de lein swank y similares;Esto parece anular el objetivo de utilizar una herramienta de gestión de dependencias, aunque si no lo haces desear esas dependencias administradas, podría tratar a Leiningen como una "herramienta de administración de dependencias de código abierto" y tal vez tener cuidado con lein clean.

A medida que la situación se vuelve más compleja (hay una mayor cantidad de archivos privados involucrados, evolucionan y es necesario 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.


(HR significa punto de corte de piezas específico de Leiningen...Continúe a continuación para obtener información sobre la historia general de las herramientas de gestión de dependencias/construcción en Clojure Land, incluidos algunos enlaces que creo que podrían resultar muy útiles en su situación).

Además, hasta el momento, no existe un acuerdo universal sobre cuál es la mejor herramienta de construcción para Clojure, y Leiningen, aunque gana en popularidad, también gana constantemente en las áreas de características y pulido, 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 aún queda mucho por hacer." Para la publicación completa y una discusión muy interesante sobre:construir herramientas y similares en el espacio Clojure, consulte el Leiningen, Clojure y bibliotecas:¿Qué me estoy perdiendo? Hilo en el grupo Clojure de Google.Muchos participantes mencionan específicamente la necesidad de tener dependencias locales que no estén contenidas en ningún repositorio, local o no, y explican las soluciones que han encontrado para tales escenarios.¿Quizás podrías ver si hay algo allí que pueda resolver tu problema ahora o que pueda resolverlo en el futuro, cuando los conjuntos de funciones maduren?

De todos modos, es posible que Leiningen no tenga todavía una buena historia lista para algunos escenarios complejos.Si cree que esto puede ser cierto en su caso (y me refiero a después de considerar la idea del repositorio privado), aquí hay algunos enlaces a alternativas basadas en Maven tomadas del hilo mencionado anteriormente: experto políglota, complemento-clojure-maven; esta publicación de blog pretende ser útil para las personas que intentan utilizar 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 compilación Groovy) con un complemento para acomodar Clojure llamado Clojuresque;Nunca lo probé yo mismo, ya que no sé nada sobre Groovy, pero afirma que hace un acto de construcción muy bueno con él y creo que no tiene nada que ver con maven, algo que es una ventaja en sí mismo. para algunos de nosotros.:-)

Otros consejos

Sólo tiene que utilizar : recursos-caminos en su archivo project.clj. Lo uso, por ejemplo, para conectarse a los servidores Siebel. Acaba de crear un recursos de directorio en mi directorio del proyecto y copiado los archivos jar en ese país. Pero, por supuesto, se puede utilizar un directorio de más genérico:

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

Luego de la Lein repl que puede crear instancias de datos de Siebel Bean, por ejemplo.

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

Si usted tiene una versión más reciente de Java se puede utilizar comodines del curso en su especificación de ruta como esta para un directorio más general:

:resource-paths ["/tmp/SiebelJars/*"]
  1. Crear un directorio en el proyecto:

    mkdir maven_repository

  2. Añadir frascos locales a este repositorio:

    Por ejemplo, el comando agrega el archivo jaad-0.8.3.jar al experto repositorio:

    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 debe trabajar:

    $ 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 ser ignorada, ya que el frasco se registró en el proyecto y no descargado de Internet.

Fuente original: Usando JAR de locales con Leiningen (cambiado desde la copia)

Me parece lein pom; lein jar; lein install funciona bien en el desarrollo de las bibliotecas.

Para ello, en la biblioteca están desarrollando y su aplicación que requiera lo usará sin ningún foo :repositories necesario.


Alternativamente, lein do pom, jar, install es ligeramente más concisa.


Esto permite llamar a la biblioteca como cualquier otra :dependencies [[project-name "version"]]

Creo que el enfoque de "correcta" es crear un repositorio Maven privada para que pueda almacenar los frascos en un solo lugar y todas sus ramas, etc va a recoger a los cambios. Esto puede ser excesiva para lo que estás haciendo. Estoy ansioso por ver si estos es una forma más fácil.

Es posible que quiera utilizar el lein-localrepo plugin: https://github.com/kumarshantanu/lein-localrepo

Un desarrollo reciente es el plugin s3-wagon-private de Phil como Leiningen: https://github.com/technomancy/ s3-vagón-privada

Esto debería permitirle publicar artefactos a un acuerdo de recompra remoto privado.

Ninguna de estas soluciones me funcionó. En su lugar he instalado un repositorio local, y se utiliza Maven para instalar el archivo jar en el repositorio local y añadido el repositorio local para mi project.clj

En la línea de comandos:

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

Y escribo mis project.clj como esto:

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

Espero que ayuda.

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

Tal vez echar un vistazo a este respuesta anterior, proporciono instrucciones paso a paso para configurar un repositorio local con el proyecto (se accede a través file://) en el que se podría instalar sus frascos.

Trate de mi solución de cómo construir archivo jar con dependencias http: // middlesphere-1 .blogspot.ru / 2014/06 / how-to-make-jar-con-dependencias-using.html

La mejor opción es configurar un privado Artifactory JFrog / Nexus y desplegar sus instantáneas / comunicados de allí y luego añadir que artifiactory como repositorios en que project.clj

Otras formas más simples son

HTTP estático El tipo más simple de depósito privado es un servidor web apuntando a un directorio lleno de archivos estáticos. Puede utilizar una URL file: /// en sus:. Repositorios para desplegar esa manera si el directorio es local a la máquina donde se está ejecutando 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 interior:

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

A continuación, coloque la siguiente fuera del defproject:

(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 desplegar a un repositorio usando el transporte SCP y consumir de ella a través de HTTP si se configura nginx o algo similar para servir al directorio del repositorio a través de HTTP.

N.B. SCP despliega a Clojars ya no son soportados

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top