如何在 Leiningen 中使用本地 jar 文件

如果在 Leiningen 建立的项目中引用第三方的库,在 project.clj 文件中 :dependencies 中指定库名版本即可。http://clojars.org/上有丰富的库可以直接用,并不是任何库都可以找到,有时也需要在 Clojure 中引入本地的一个 .jar 文件,可以手动建个本地 Maven 仓库来,不过 lein 里有个叫 lein-localrepo 的插件可以帮我们完成这个步骤。

为了演示,我先用 lein 命令创建一个叫hello的项目:

$ lein new hello

然后编辑 project.clj,添加以下:

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

lein 会自动安装 lein-localrepo 插件。

OK,现在我从 https://commons.apache.org/proper/commons-codec/download_codec.cgi 下载了 Apache 公共库里的 Codec 库,解压后得到 commons-codec-1.9.jar 这个文件,我需要把它引入到当前 hello 项目中使用。

运行以下命名:

lein localrepo coords ~/commons-codec-1.9.jar

把运行后的输出内容记下:

/home/lu4nx/commons-codec-1.9.jar commons-codec/commons-codec 1.9

第二列就是添加到 :dependencies 里的库名,以及第三列的版本。现在我们把它加入到 project.clj 中:

:dependencies [[org.clojure/clojure "1.6.0"]
	 [commons-codec/commons-codec "1.9"]]

然后,我们把 commons-codec-1.9.jar 添加到本地 Maven 仓库中来:

lein localrepo install ~/commons-codec-1.9.jar commons-codec/commons-codec 1.9

注意最后两个参数,仍然是执行 coords 输出的内容,包名和版本号。

接下来运行以下命令,lein 自动解决依赖问题:

$ lein deps

执行完毕后检查 Classpath,看 commons-codec 是否可用:

$ lein classpath
/home/lu4nx/hello/test:/home/lu4nx/hello/src:/home/lu4nx/hello/dev-resources:/home/lu4nx/hello/resources:/home/lu4nx/hello/target/classes:/home/lu4nx/.m2/repository/clojure-complete/clojure-complete/0.2.3/clojure-complete-0.2.3.jar:/home/lu4nx/.m2/repository/org/clojure/tools.nrepl/0.2.6/tools.nrepl-0.2.6.jar:/home/lu4nx/.m2/repository/commons-codec/commons-codec/1.9/commons-codec-1.9.jar:/home/lu4nx/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar

一般情况下,只要没有报错,都应该没问题的,从输出结果中已经看到 commons-codec-1.9.jar 了,说明可用了,接着在 REPL 中尝试调用这个库:

$ lein repl
user=> (import '[org.apache.commons.codec.net URLCodec])
org.apache.commons.codec.net.URLCodec
user=> (.encode (URLCodec.) "哈哈")
"%E5%93%88%E5%93%88"