2012-06-25 5 views
7

Soy nuevo en clojure. Tengo un archivo jar con el que quiero jugar en un clojure repl, pero no he podido hacerlo con leiningen 2.Cómo iniciar una réplica de clojure con acceso a un contenedor

He intentado colocar el archivo jar en src/myjar.jar y también en src/org /mydomain/myjar.jar

Cuando ejecuto lein repl recibo errores que indican que leiningen no puede encontrar mi artefacto, y una referencia a una página sobre repetibilidad que no entiendo.

Aquí es mi project.clj (con el nombre real de myjar)

(defproject cljliveordead "0.1.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :url "http://example.com/FIXME" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies [[org.clojure/clojure "1.3.0"] 
       [org.allen.temporalintervalrelationships/time "0.2" :extension "jar"]]) 

Respuesta

4

Puede utilizar los contenedores locales utilizando el complemento lein-localrepo. Añadir esta línea a su project.clj

:plugins [[lein-localrepo "0.4.0"]] 

a continuación, instalar el frasco en el repositorio local utilizando

lein localrepo install <path-to-jar> org.allen.temporalintervalrelationships/time 0.2 

Puede comprobar que el archivo se instala ejecutando lein localrepo list y comprobar que Lein puede resolver el proyecto dependencias que usan lein deps. Si todo está bien, puede comenzar a jugar con el jar usando lein repl.

A Leiningen no le gustan las jarras locales debido a su objetivo de repeatable builds. Si se trata de un proyecto real que utiliza un contenedor de código cerrado de un tercero, entonces lo mejor es instalarlo en un repositorio Nexus local y agregar una referencia a ese repositorio a su proyecto.

Sin embargo, todo esto parece un poco pesado para lo que está tratando de lograr.Si todo lo que quiere hacer es jugar con el frasco en el REPL a continuación, crear un proyecto simple como esto

(defproject clojure-time "0.1.0-SNAPSHOT" 
    :dependencies [[org.clojure/clojure "1.4.0"] 
       [com.cemerick/pomegranate "0.0.13"]]) 

y el uso de la biblioteca pomegranate añadir el frasco a la ruta de clases manualmente

(require '[cemerick.pomegranate :as p]) 
(p/add-classpath "jsr-310-ri-0.6.3.jar") 
(javax.time.Instant/now) 

y el juego lejos.

1

la forma hacker es que sólo hay que poner en /proiject/path/lib/ y la forma 'adecuada' es:

  • agregue una dependencia para su proyecto
  • ejecutar lein deps que imprimirá el comando para instalar el contenedor en su repositorio local de maven
  • ejecute el comando leiningen g Ives usted con la ruta a su tarro de
  • plazo Lein deps nuevo
+0

¿Puedes aclarar el agregar un paso de dependencia? He intentado hacer eso en mi project.clj pero no tuve suerte –

+0

¿qué tipo de ruta es/project/path/lib, una ruta absoluta? –

+0

es mi intento de describir el subdirectorio lib en el directorio principal del proyecto. en el mismo directorio que su project.clj su debería ser un subdirectorio llamado lib –

1

utilizo clojure-csv en muchas de mis aplicaciones, así que asegúrese de los módulos referenciando clojure-csv eran capaces de construir con ella, esta es lo que hice:

0) Ran lein new bene-csv

1) Añadido a esto project.clj (después de entrar en Lein nueva bene-csv). La línea correspondiente es [clojure-csv/clojure-csv "1.3.2"], pero tiene sentido mostrarle todo el proyecto.clj por el buen ejemplo.

(defproject bene-csv "1.0.4-SNAPSHOT" 
    :description "A csv parsing library" 
    :dependencies [[org.clojure/clojure "1.3.0"] 
       [clojure-csv/clojure-csv "1.3.2"] 
       [util "1.0.2-SNAPSHOT"]] 


    :aot [bene-csv.core] 
    :omit-source true) 

2) Se aseguró de mis referencias/src/bene_csv/core.clj bene-csv clojure-csv.

(ns bene-csv.core 
    ^{:author "Charles M. Norton", 
    :doc "bene-csv is a small library to parse a .csv file. 
     Created on March 8, 2012"} 
    (:require [clojure.string :as cstr]) 
    (:require [util.core :as utl]) 
    (:use clojure-csv.core)) 

Por último, me encontré con estos comandos, por lo que mi proyecto principal podría hacer referencia a las funciones y defs de bene-CSV.

lein deps 
lein install 
+1

gracias por la ayuda. No estoy seguro de cómo esto se aplica a mi caso porque estoy tratando de usar un archivo java sin formato de lein repl en lugar de importar un archivo clojure lib. –

+0

Mi respuesta tendía a ir en la dirección de usar un gravamen basado en lo que usted pidió. Creo que el archivo raw jar se puede importar de la misma manera, al tenerlo en classpath. – octopusgrabbus

Cuestiones relacionadas