8

我是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"]])
4

3 回答 3

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.

Leiningen 不喜欢本地 jar,因为它的目标是可重复构建。如果这是一个使用第三方闭源 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)

和玩。

于 2012-07-12T13:54:03.740 回答
1

骇人听闻的方法是将其放入/proiject/path/lib/,而“正确”的方法是:

  • 将它的依赖项添加到您的项目中
  • 运行 lein deps 它将打印将 jar 安装到本地 maven repo 的命令
  • 运行命令 leiningen 为您提供 jar 的路径
  • 再次运行 lein deps
于 2012-06-26T00:14:02.637 回答
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 的函数和定义。

lein deps
lein install
于 2012-06-26T14:42:50.830 回答