如何通过访问jar启动clojure repl

时间:2012-06-25 23:25:24

标签: clojure leiningen

我是clojure的新手。我有一个jar文件,我想在clojure repl中玩,但我没有用leiningen 2这样做。

我尝试将jar文件放在src / myjar.jar中,也放在src / org / mydomain / myjar.jar中

当我运行lein repl时,我收到错误,指出leiningen无法找到我的工件,并且引用了一个关于可重复性的页面我不明白。

这是我的project.clj(真实姓名为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"]])

3 个答案:

答案 0 :(得分:4)

您可以使用lein-localrepo插件使用本地jar。将此行添加到project.clj

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

然后使用

将jar安装到本地存储库
lein localrepo install <path-to-jar> org.allen.temporalintervalrelationships/time 0.2

您可以通过运行lein localrepo list来检查文件是否已安装,并检查lein是否可以使用lein deps解析项目依赖项。如果一切顺利,那么您可以使用lein repl开始使用jar。

Leiningen因为repeatable builds的目标而不喜欢当地的罐子。如果这是一个使用第三方封闭源jar的真实项目,那么最好的办法是将其安装在本地Nexus存储库中,并将该存储库的引用添加到您的项目中。

然而,对于你想要实现的目标,这一切似乎都有点重量级。如果你想要做的只是在REPL中使用jar,那么创建一个像这样的简单项目

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

并使用pomegranate库手动将jar添加到类路径中

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

然后离开。

答案 1 :(得分:1)

hackish方式是将它放入/proiject/path/lib/,而'正确'的方式是:

  • 为项目添加依赖项
  • 运行lein deps,它将打印用于将jar安装到本地maven repo的命令
  • 运行命令leiningen为您提供罐子的路径
  • 再次运行lein deps

答案 2 :(得分:1)

我在很多应用程序中使用clojure-csv,所以确保引用clojure-csv的模块能够用它构建,这就是我所做的:

0)跑lein new bene-csv

1)将此添加到project.clj(在输入lein new bene-csv之后)。相关的行是[clojure-csv/clojure-csv "1.3.2"],但是为了向好的例子展示整个project.clj是有道理的。

(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)确保我的bene-csv / src / bene_csv / core.clj引用了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))

最后,我运行了这些命令,以便我的主项目可以引用bene-csv的函数和defs。

lein deps
lein install