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

Ist*_*van 10 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)
Run Code Online (Sandbox Code Playgroud)

默认情况下,类路径为:

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
Run Code Online (Sandbox Code Playgroud)

Art*_*ldt 11

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

  • 莱恩新项目名称
  • 使用您选择的名称将您需要的库添加到project.clj文件中
  • 运行lein deps打印出用于将jar添加到本地仓库的命令
  • 加上罐子
  • 再次运行lein deps(如果使用leiningen2,可以跳过此步骤)
  • 运行lein repl
  • 请享用

这假设你正在使用的库不是maven仓库中的一个包的一部分或者是可用的,很多都是.


Joo*_*aat 10

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

否则,你可以修改任何内容,clj并以java喜欢的方式添加/设置类路径.请参阅例如在java类路径中设置多个jar

  • 你能补充更多细节吗?比如leiningen的project.clj中应该设置哪些选项? (3认同)

bmi*_*are 10

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

这可以让你这样做:

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


ffr*_*end 6

我假设这clj是一个启动Clojure REPL的脚本.看一下这个脚本,找到与此类似的行:

java -cp /path/to/clojure.jar clojure.main
Run Code Online (Sandbox Code Playgroud)

在这里,你开始clojure.main在类路径上有"clojure.jar".要添加更多罐子,只需将它们添加到-cp选项值的末尾即可.例如在Linux上:

java -cp /path/to/clojure.jar:/path/to/mylib.jar clojure.main
Run Code Online (Sandbox Code Playgroud)

(;而不是:在Windows上使用)

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