2012-06-25 18 views
7

Tôi mới đến clojure. Tôi có một tập tin jar tôi muốn chơi với một clojure repl, nhưng tôi đã không làm như vậy với leiningen 2.Làm thế nào để khởi động một clojure repl với quyền truy cập vào một cái bình

Tôi đã thử đặt tệp jar trong src/myjar.jar và cũng trong src/org /mydomain/myjar.jar

Khi tôi chạy lein repl, tôi nhận được lỗi nói rằng leiningen không thể tìm thấy phần tạo tác của tôi và tham chiếu đến trang về độ lặp lại mà tôi không hiểu.

Đây là project.clj của tôi (với tên thật của 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"]]) 

Trả lời

4

Bạn có thể sử dụng các lọ địa phương bằng cách sử dụng plugin lein-localrepo. Thêm dòng này vào project.clj bạn

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

Sau đó cài đặt jar vào kho địa phương sử dụng

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

Bạn có thể kiểm tra xem các tập tin được cài đặt bằng cách chạy lein localrepo list và kiểm tra Lein rằng có thể giải quyết dự án phụ thuộc sử dụng lein deps. Nếu tất cả là tốt thì bạn có thể bắt đầu chơi với bình bằng cách sử dụng lein repl.

Leiningen không thích lọ địa phương do mục tiêu của nó là repeatable builds. Nếu đây là một dự án thực sự bằng cách sử dụng một jar nguồn đóng của bên thứ ba thì điều tốt nhất cần làm là cài đặt nó trong kho lưu trữ Nexus cục bộ và thêm một tham chiếu đến kho lưu trữ đó vào dự án của bạn.

Tuy nhiên, điều này có vẻ hơi nặng đối với những gì bạn đang cố gắng đạt được.Nếu tất cả các bạn muốn làm là chơi với jar trong REPL sau đó tạo ra một dự án đơn giản như thế này

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

và sử dụng thư viện pomegranate để thêm jar vào classpath của bạn bằng tay

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

và chơi xa.

1

cách hackish là chỉ cần đặt nó vào /proiject/path/lib/ và cách 'đúng' là:

  • thêm một phụ thuộc cho nó vào dự án của bạn
  • chạy lein deps sẽ in lệnh để cài đặt các jar để repo maven địa phương của bạn
  • chạy lệnh leiningen g ives bạn với đường dẫn đến bình của bạn
  • chạy Lein DEPS lại
+0

bạn có thể làm rõ thêm bước phụ thuộc không? Tôi đã cố gắng làm điều đó trong project.clj của tôi nhưng không may mắn –

+0

loại đường dẫn nào là/project/path/lib, một đường dẫn tuyệt đối? –

+0

đó là nỗ lực của tôi để mô tả thư mục con lib trong thư mục dự án chính. trong cùng thư mục với project.clj của bạn, chúng phải là một thư mục con được gọi là lib –

1

tôi sử dụng clojure-csv trong rất nhiều ứng dụng của tôi, do đó hãy chắc chắn rằng các module tham khảo clojure-csv đã có thể xây dựng với nó, điều này là những gì tôi đã làm:

0) Ran lein new bene-csv

1) Added này để project.clj (sau khi nhập Lein mới bene-csv). Dòng thích hợp là [clojure-csv/clojure-csv "1.3.2"], nhưng nó có ý nghĩa để cho bạn thấy toàn bộ project.clj vì lợi ích của ví dụ tốt.

(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) Đảm bảo tài liệu tham khảo bene-csv/src/bene_csv/core.clj của tôi 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)) 

Cuối cùng, tôi đã chạy các lệnh này để dự án chính của tôi có thể tham chiếu các chức năng và lỗi của bene-csv.

lein deps 
lein install 
+1

cảm ơn sự giúp đỡ. Tôi không chắc chắn làm thế nào điều này áp dụng cho trường hợp của tôi bởi vì tôi đang cố gắng sử dụng một jar java thô từ lein thay vì nhập khẩu một lib clojure. –

+0

Câu trả lời của tôi có xu hướng đi theo hướng sử dụng quyền dựa trên những gì bạn đã hỏi. Tôi tin rằng tập tin jar nguyên có thể được nhập khẩu theo cùng một cách, bằng cách có nó trên classpath. – octopusgrabbus

Các vấn đề liên quan