如何将目录添加到Clojure的类路径?

时间:2012-08-15 17:00:16

标签: java clojure

我已将Maven的库安装到〜/ .m2 / repository /目录中。我想将该路径添加到默认的Clojure类路径。我找不到文档如何做到这一点。

任何提示?

干杯!

clj
Clojure 1.4.0
user=> (require '[clojure.java.jmx :as jmx])
FileNotFoundException Could not locate clojure/java/jmx__init.class or clojure/java/jmx.clj on classpath:   clojure.lang.RT.load (RT.java:432)

默认情况下,类路径为:

user=> (println (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
(#<URL file:/Users/myuser/cljmx/> #<URL file:/usr/local/Cellar/clojure/1.4.0/clojure-1.4.0.jar> #<URL file:/Users/myuser/cljmx/>)
nil

4 个答案:

答案 0 :(得分:11)

通过保持与项目关联的类路径的设置,Leiningen确实使这个过程变得更加痛苦,更重要的是导致可重复的构建过程。你可以在几年后回到这个项目,仍然可以获得一个repl。在这些情况下使用leiningen的概述:

  • lein new projectname
  • 将您需要的库添加到project.clj文件中,并使用您选择的名称
  • 运行lein deps打印出用于将jar添加到本地仓库的命令
  • 添加jar
  • 再次运行lein deps(如果使用leiningen2,可以跳过此步骤)
  • run lein repl
  • 享受

这假设您正在使用的库不是maven仓库中的一部分的一部分,也可以从maven仓库中获得,很多都是。

答案 1 :(得分:9)

非痛苦,流行的方法是不要直接使用maven和类路径以及JRE,并使用leiningen:https://github.com/technomancy/leiningen/

否则,你可以修改clj中的任何内容,并以java喜欢的方式添加/设置类路径。请参阅示例Setting multiple jars in java classpath

答案 2 :(得分:9)

应该注意的是,您还可以选择在运行时使用库石榴https://github.com/cemerick/pomegranate

添加类路径

这可以让你这样做:

 (require '[cemerick.pomegranate :as pom])
 (pom/add-classpath "/home/user/~.m2/....")

答案 3 :(得分:6)

我假设clj是一个启动Clojure REPL的脚本。查看此脚本并找到与此类似的行:

java -cp /path/to/clojure.jar clojure.main

在这里,您可以在类路径上启动具有“clojure.jar”的类clojure.main。要添加更多jar,只需将它们添加到-cp选项值的末尾即可。例如。在Linux上:

java -cp /path/to/clojure.jar:/path/to/mylib.jar clojure.main

(在Windows上使用;代替:

然而,很快你会厌倦这种方式并寻找项目管理工具。所以现在开始使用它是有道理的。看看Leiningen - 它基于Maven为你管理依赖关系(因此添加新jar非常容易)并且有REPL。